- Posted by 微博@Yangsc_o
- 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
本题是leetcode,地址:9. 回文数
题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:你能不将整数转为字符串来解决这个问题吗?
分析
此题有两种解法:1、变换为字符串;2、通过数字反转
字符串的回文很简单,双子针,一个从前往后,一个从后往前,判断字符是否相等即可,终止条件是双子针相等了,看代码;
code-字符串
public boolean isPalindrome(int x) {
String s = x + "";
char[] chars = s.toCharArray();
int left = 0;
int right = chars.length - 1;
while(left <= right) {
if(chars[left] != chars[right]) {
return false;
}
left++ ;
right--;
}
return true;
}
code-数字反转
对于一个数字,我们对其%10操作,可以得到该数的最后一位数字,例如1221对10取余得到1,持续%10,则可以得到每一位数字,如果我们对每次取余数的数字乘10操作,则可以得到对应的反转数字;
当我们反转一半时,比较两个数是否相等即可;一半的判断条件就是不断取余的数组小于反转数字;
** 注:需要注意如果数字是121时,反转后我们得到两个数组1,12,直接舍弃最后一位数进行比较即可,看代码**
public boolean isPalindrome(int x) {
if(x == 0) return true;
if(x < 0 || x % 10 == 0 ) return false;
int rev = 0;
while(x > rev) {
rev = x % 10 + rev * 10;
x = x / 10;
}
return x == rev || x == rev / 10;
}