https://leetcode-cn.com/problems/palindrome-number/description/
原始代码(普通写法)
(提交了一个外网一个除了变量名一模一样的程序结果从256ms变成96ms???)
(用 len=a.length 和直接用差距这么大???)
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
String s= ""+x;
char[] a = s.toCharArray();
for (int i=0;i<a.length/2;i++)
{
if (a[i]!= a[a.length-i-1]) return false ;
}
return true;
}
}
步骤太多速度太慢
其他思路:
1.用除法实现按位比较
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
int mi = 0;
for(int i =1;i<=x;i*=10) mi++;
for(int i=1 ;i<mi;i++ )
{
if( (x/(int)Math.pow(10,mi-i)%10)!=(x%(int)Math.pow(10,i)/(int)Math.pow(10,i-1))) return false;
}
return true;
}
}
(1410110141)无法通过,原因是溢出,把i从int改成double通过
从226ms到126ms ,还能有提速空间
网站优解(原理类似1,思路更好)
class Solution {
public boolean isPalindrome(int x) {
if (x < 0 || (x != 0 && x % 10 == 0)) { //x是10的倍数一定不是回文串
return false;
}
int s = 0;
while (s <= x) {
s = s * 10 + x % 10;
if (s == x || s == x / 10) { //分别处理整数长度是奇数或者偶数的情况
return true;
}
x /= 10;
}
return false;
}
}