大家好呀,我是苍何。
网上看到个逆天的帖子,说互联网现在不卡 35 岁了,直接提前到 32 岁了,真是开了眼。
本来我觉得这玩意也就是网友发着玩吧,赚点流量?但当我打开评论区一看,直接就炸开了锅。
大家纷纷匿名爆料出各种卡年轻的公司,更有甚者,说卡 32 算什么,直接卡 28,这是打算用完应届生身份就丢吗?
具体真实性不好说,但现实很多公司都需要有经验的选手,又想你有个 10 年的经验,又不想你的年龄到 35,这里的经验还不是单纯的工作年限,而是在某一个行业的经验。
比如干金融的,希望找个干了 5 年金融的程序员,年龄不超过 28,因为是纯开发嘛,年龄大了他们会觉得没有年轻人能熬,能加班。
所以同一份简历,即使你背景再优秀,年龄到那里了,自然比不过小年轻,不光薪资要的低,还愿意加班,听话。
我在想退休推迟了,鼓励老年人再就业,那 35 岁到退休这段时间,该何去何从,明明就是而立之年,空有一腔抱负,却无法施展。
不会真的只有吉祥三宝(保安、保洁、保姆)和铁人三项(外卖、滴滴、快递)才是归宿吧?
我们程序员这个行业,年龄 bug 更为严重,我们组内小年轻明显就感觉更能卷,有一晚干到两点,第二天继续撸代码,换做是现在的我,不得废掉半条老命好半天缓不过来。
我今天还和老婆说,等实在干不下去了,就自己租个摊子,干起卖铁板豆腐的行当,实在不行,回老家,传承老爸吹唢呐的技能,在红事白事间,诉说人生大喜与大悲。
经常群里有人问,该怎么办呀,某某公司又优化人了,没工作该怎么办啊?要是轮到我该怎么办啊?
是挺焦虑的,我也不喜欢传播焦虑,但你要问该怎么办?没太多办法,我觉得啊,省省钱,少些欲望,佛系些,等待周期变化,不下牌桌,等待就好,花总会开的。
好啦,关于卡年龄这事,你怎么看?欢迎评论区讨论。
...
回归主题。
今天来一道所有年龄的人都能做出的的一道面试算法题,给枯燥的牛马生活加加油😂。
题目描述
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如:
121
是回文数,而123
不是。
示例 1:
输入:
x = 121
输出:
true
示例 2:
输入:
x = -121
输出:
false
解释:从左向右读为 -121
,从右向左读为 121-
,因此它不是一个回文数。
示例 3:
输入:
x = 10
输出:
false
解释:从左向右读为 10
,从右向左读为 01
,因此它不是一个回文数。
提示:
-2³¹ <= x <= 2³¹ - 1
解题思路
数字转字符串法:
将数字转换为字符串,然后直接判断字符串是否是回文。
简单易实现,但需要额外的字符串空间。
反转整数法:
不转换为字符串,直接通过数学运算反转整数。
如果反转后的整数与原整数相等,则是回文数。
为避免整数溢出,只反转一半的数字。
优化数学方法:
对于负数,直接返回
false
,因为负数不可能是回文数。对于末尾为 0 且不为 0 的数字,也返回
false
,因为这种情况的整数不可能是回文数。将数字一半反转后,判断原始数字的前半部分是否与反转后的部分相等。
代码实现
Java 实现
public class PalindromeNumber {
public boolean isPalindrome(int x) {
// 负数和以 0 结尾的非零数字不是回文数
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reversedNumber = 0;
int original = x;
// 反转数字
while (x > 0) {
reversedNumber = reversedNumber * 10 + x % 10;
x /= 10;
}
// 比较反转后的数字和原始数字
return original == reversedNumber;
}
public static void main(String[] args) {
PalindromeNumber solution = new PalindromeNumber();
System.out.println(solution.isPalindrome(121)); // 输出 true
System.out.println(solution.isPalindrome(-121)); // 输出 false
System.out.println(solution.isPalindrome(10)); // 输出 false
}
}
C++ 实现
#include <iostream>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
// 负数和以 0 结尾的非零数字不是回文数
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reversedNumber = 0;
int original = x;
// 反转数字
while (x > 0) {
reversedNumber = reversedNumber * 10 + x % 10;
x /= 10;
}
// 比较反转后的数字和原始数字
return original == reversedNumber;
}
};
int main() {
Solution solution;
cout << solution.isPalindrome(121) << endl; // 输出 1 (true)
cout
<< solution.isPalindrome(-121) << endl; // 输出 0 (false) cout << solution.isPalindrome(10) << endl; // 输出 0 (false) return 0; }
---
### Python 实现
```python
class Solution:
def isPalindrome(self, x: int) -> bool:
# 负数和以 0 结尾的非零数字不是回文数
if x < 0 or (x % 10 == 0 and x != 0):
return False
reversed_number = 0
original = x
# 反转数字
while x > 0:
reversed_number = reversed_number * 10 + x % 10
x //= 10
# 比较反转后的数字和原始数字
return original == reversed_number
# 测试用例
solution = Solution()
print(solution.isPalindrome(121)) # 输出 True
print(solution.isPalindrome(-121)) # 输出 False
print(solution.isPalindrome(10)) # 输出 False
复杂度分析
时间复杂度:O(log₁₀(x))
反转数字时,循环次数与数字的位数成正比。一个 n 位数的循环次数为 n。
空间复杂度:O(1)
只使用了常数额外空间来存储变量。
ending
你好呀,我是苍何。是一个每天都在给自家仙人掌讲哲学的执着青年,我活在世上,无非想要明白些道理,遇见些有趣的事。倘能如我所愿,我的一生就算成功。共勉 💪
点击关注下方账号,你将感受到一个朋克的灵魂,且每篇文章都有惊喜。
感谢大家一直以来的阅读、在看和转发,我会把流量主收益都用来发红包,大家可在公众号页面发送相关暗号关键词获取抽奖,每一篇文章会给到一个不同的暗号,对应的抽奖都是独立的,此篇暗号为【35】,在后台回复【35】,即可点击进去参与抽奖!抽奖内容、金额、个数等都无变化,在开奖前参与抽奖,操作均有效。
注意,后台(不是评论区,是后台)回复【35】即可参与抽奖。
后台回复(不是评论区,是后台)即可参与抽奖。
后台回复(不是评论区,是后台)即可参与抽奖。
就像大家之前回复【八股】一样。