回文数算法
今天看到一个很巧妙的回文数算法,不需要将数字转换成字符串就能判断该数字是否为回文数。
思路:
例如回文数:12321
step1:判断该数字是否为负数,负数代表不可能为回文数
step2:判断该数字是否以0结尾,以0结尾的数字不能为回文数
step3:设 12321 为x,声明 reverted 用于记录上一次截取部分
step4:循环做除法计算;每一次循环获取x的最后一位 + 上次截取位数*10,然后将x/10,x会原来越小
循环解刨:
第一次循环 x = 1232 、reverted = 1
第二次循环 x = 123、reverted = 12
第三次循环 x = 12、reverted = 123
如果x为偶数直接判断x == reverted 、如果x为奇数那就判断 x == reverted /10
package per.yzb.study.leecode;
public class Solution {
public static void main(String[] args) {
System.out.println(isPalindrome(12321));
}
public static boolean isPalindrome(int x) {
if (x == 0) {
return true;
}
if (x < 0 || x % 10 == 0) {
return false;
}
int revered = 0;
while (x > revered) {
revered = x % 10 + revered * 10;
x /= 10;
}
/**
* x == revered || x == revered / 10;
* 已经包含奇数和偶数的判断
* */
return x == revered || x == revered / 10;
}
}