LeetCode第九题(回文数)

266 阅读1分钟

逐位取余法(Java)

核心思想: 将整数后一半位数的数字逐位取余,得到每一位数字,相乘10倍并累加,最后判断x的倒序的一半位数的整数与x的正序的一半位数的整数是否相等

class Solution {
    public boolean isPalindrome(int x) {
        //负数或10的整数倍都不是回文数
        if(x < 0 || (x % 10 == 0 && x / 10 != 0))
            return false;
        //若x是回文数,只需判断x位数的一半即可
        int rev_x = 0;//保存x的倒序的一半位数的整数
        while(rev_x < x){
            int digit = x % 10;//依次获取x后一半的数字
            x /= 10;//x依次/10
            rev_x = rev_x * 10 + digit;//相乘10倍并累加
        }
        //判断x的倒序的一半位数的整数与x的正序的一半位数的整数是否相等
        if(rev_x / 10 == x || rev_x == x)
            return true;
        else 
            return false;
    }
}

利用字符串反转(Java)

核心思想:  利用StringBuilder的reverse()直接反转

class Solution {
    public boolean isPalindrome(int x) {
        //负数或10的整数倍都不是回文数
        if(x < 0 || (x % 10 == 0 && x / 10 != 0))
            return false;
        //利用StringBuilder的reverse()直接反转
        String str_x = Integer.toString(x);
        StringBuilder sb = new StringBuilder(str_x);
        String rev_str_x = sb.reverse().toString();
        //直接字符串判断
        if(str_x.equals(rev_str_x))
            return true;
        else
            return false;
    }
}