【每日刷题】回文数
9. 回文数 - 力扣(LeetCode)
方法一
转换为字符串后判断。
class Solution {public boolean isPalindrome(int x) {String s = String.valueOf(x);int n = s.length() - 1;for(int i = 0; i <= n / 2; i++) {if(s.charAt(i) != s.charAt(n - i)) {return false;}}return true;}
}
方法二
处理x,逐位比较最高位和最低位,判断是否相等。
首先考虑如果x<0,带负号,肯定不是回文数,返回false。
之后是x为正数时的思路。最低位比较容易得到,x%10即可。如何得到最高位呢?首先用cnt记录x的位数,通过循环除以10统计总位数。之后用 x / (10^(cnt-1)) 即可得到x的最高位,再与最低位比较,如果不相等就返回false。如果最高位与最低位相等,用 x %= (int)Math.pow(10, cnt-1) 去除最高位,用 x /= 10 去除最低位,注意去除了两位数,所以cnt要减2。
class Solution {public boolean isPalindrome(int x) {if(x < 0) {return false;}int cnt = 0;int tx = x;while(tx != 0) {tx /= 10;cnt++;}while(x > 0) {int l = x / (int)Math.pow(10, cnt-1);int r = x % 10;if(l != r) {return false;}x %= (int)Math.pow(10, cnt-1);x /= 10;cnt -= 2;}return true;}
}
方法三
来源于官方题解,反转一半数字,然后判断是否为回文数。当数字为偶数时直接判断 x == revertedNumber 是否成立,但当数字长度为奇数时,需要通过 revertedNumber/10 去除处于中位的数字。注意需要特判末尾为0的数。
class Solution {public boolean 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;}
}
碎碎念
看八股看烦了,这个八股到底谁背得过,我到底为什么要来卷卷卷卷卷的Java后端啊!!!一怒之下怒了一下,怒刷题。今天把面试150下数学专栏的题刷了,还剩一道hard,明天再刷。因为今晚要写一二三四……五篇题解,所以就先不附Python版本代码了。
思路也会写得比较简单。毕竟本来就是数学专栏,这个想得到就是想得到,想到了代码就出来了,想不到怎么都想不到。做过就会,但完全没做过能自己想出来的可能性很小。