您的位置:首页 > 其它

Leetcode-9. 回文数

MuNaiTao 2020-03-15 18:23 36 查看 https://blog.csdn.net/munaitao

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?

题解思路

可以通过之前的一道整数反转来做。如果将x全部反转。就要考虑溢出的问题。看了解答发现可以用反转一半。比较x的前一半和。反转的后一半是否相等。
怎么判断反转了一半?

通过x /10 与 反转数reverseNum*10 进行比较,如果 前者小于后者,就说明反转了一半了。 再比较得到的x与reverseNum是否相等。同时如果x是奇数位数,例如12321,那么x/10不断执行后,x为12 reverseNum为123.就必须让reverseNum%10与x进行比较

class Solution {
public boolean isPalindrome(int x) {
//对x分别求出首位和个位。 只要有一个不相等就返回false
int temp=0;
int rev= 0;
if(x<0 || x%10 == 0 && x !=0){
return false;
}
int reverseNum=0;
while(x > reverseNum){ //进行反转
//反转一半就行。 原始数字除以10,与反转后的数*10进行比较,如果后者大于前者 。就说明 将原始数反转了一半了。
//原始数反转一半就可以不需要考虑溢出的问题。
reverseNum = reverseNum* 10 + x%10;
x =x/10;

}

//如果x是有奇数位数, 比如12321 通过上面的反转 x = 12  reverseNum=123, 所以需要考虑x是否等于reverseNum/10;
//最后还要考虑10 1000 1000 300这些情况。
return x==reverseNum || x== reverseNum/10;
}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
MuNaiTao 发布了13 篇原创文章 · 获赞 0 · 访问量 238 私信 关注
标签: