哈喽哈喽大家 好久不见 虽然说着是每日 但我实在懒 今天才做第二篇 以后会努力多多更新的!
方法一:数字反转
1、整体思路:将数字的各个位数遍历倒转之后对比是否相等
2、简单好理解 不涉及什么复杂知识点 只需要搞清楚除余和除的区别 合理应用即可
3、优缺点分析:用时短 但内存消耗大
下面展示C++方法主体代码~
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
long long original = x;//原数
long long reversed = 0;//换位置之后的数
while (x!= 0) {
reversed = reversed * 10 + x % 10; //通过遍历调换位置
x /= 10;
}
return original == reversed;
}
};
方法二:转换成字符串
1、解题思路:将x转换为字符串 通过遍历字符串的方法来核对从前到后和从后往前的数是否一致
2、涉及方法
①C++中的str[index]方法:通过下标访问字符串(或数组)中的元素,index是下标
3、优缺点分析:耗内存且速度慢 不推荐~
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
std::string str = std::to_string(x);//转换成字符串类型
int left = 0;
int right = str.size() - 1;//定义左右下标
while (left < right) {
if (str[left]!= str[right]) {
return false;
}
left++;
right--;//left实现从前往后的遍历 right实现从后往前的遍历
}
return true;
}
};
方式三:后半部分翻转(python)
这里再给出一个用python写的翻转后半部分的解法~
1、解题思路:利用x偶位数 后半部分翻转对称 x奇位数 关于中间的数对称来解
2、优缺点分析:耗时多 占内存也比较多
class Solution(object):
def isPalindrome(self, x):
//x % 10 == 0 and x!= 0表示以0结尾的十位数 如20、30
if x < 0 or (x % 10 == 0 and x!= 0):
return False
reverted_number = 0
while x > reverted_number:
reverted_number = reverted_number * 10 + x % 10
x //= 10
return x == reverted_number or x == reverted_number // 10
//如果x的位数是偶数 那么原数是对称的 利用x>reverted_number限制一下 结束循环时x==reverted_number
//如果x的位数是奇数 那么x的首位数应该和尾位相同 即reverted_number的位数与剩余的x相同
今天的分享就到这里啦~有问题欢迎大家在评论区交流哦~