【简单】9-回文数 Palindrome Number
题目
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Follow up:
Coud you solve it without converting the integer to a string?
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
Example1
输入: 121
输出: true
Example2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
Example3
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode)
链接:https://leetcode.com/problems/palindrome-number
解法
方法一:字符串
思路
进阶处已经说了,可以转化成字符串解决问题。从两端开始比较,出现不一样的字符就判断为不是回文数字,直到中间即可
代码
class Solution {
public:
bool isPalindrome(int x) {
string s = to_string(x);
int len = s.length();
if(len < 2){
return true;
}
int left = 0, right = len-1;
while(left<right){
if(s[left] != s[right])
return false;
else{
left++;
right--;
}
}
return true;
}
};
方法二:转化为反向的数字
思路
可以将数字翻转过来,判断反转前后是否相等,但是要注意数字翻转过来时可能会溢出,反转数字方法简单,给出图
代码
以下代码为leetcode给出的标准方法
long recursive(int a, long rest){
if (a == 0) return rest;
rest *= 10;
return recursive(a/10, rest + a%10);
}
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
long a = recursive(x, 0);
if (a - x == 0) return true;
else return false;
}
};
总结
- 数字反向问题可以用递归的方法处理
Email:1252418308@qq.com