题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
原先的思路:
把整数x转换成字符串,然后从i=n遍历再转换成整数看是否相等,但是有一点,万一转换后的整数超出最大int.Max,则会溢出。
先贴代码:
class Solution {
public:bool isPalindrome(int x) {if (x < 0 || (x % 10 == 0 && x != 0)) {return false;}int revertedNumber = 0;while (x > revertedNumber) {revertedNumber = revertedNumber * 10 + x % 10;x /= 10;}return x == revertedNumber || x == revertedNumber / 10;}
};
下面来根据需求解释代码
首先要排除一些不符合回文数定义要求的数,第一个就是负数,例如-192,不可能有291-这样的数字;第二个就是以0结尾的数,不可能会有除了0本身之外0为开头的数字。所以满足这些条件的数字返回false。
根据力扣官方的妙思,反转数字后半段看是否能和前半段的数字相等。通过举一些例子能看出,如果后半段大于前半段的时候,就代表已经转换一半了。如果长度为偶数的数字,xr,就代表是回文数;若是长度为奇数,xr/10,就代表是回文数。
感觉这次就是利用各种各样的取模、相乘、除法来摸清楚规则。