🌕 9. 回文数

吞佛童子2022年6月20日
  • algorithm
  • Number
大约 1 分钟

🌕 9. 回文数

难度: 🌕

问题描述

img_1.png


解法 1 - 双指针

class Solution {
    public boolean isPalindrome(int x) {
        // 思路:
        // 找到最高非 0 位所在下标,双指针移动
        if(x < 0) {
            return false;
        }
        if(x == 0) {
            return true;
        }
        // x > 0
        int left = 10;
        for(; left >= 0; left --) {
            if(x / (int)Math.pow(10, left) > 0) {
                break;
            }
        }
        if(left == 0) {
            // 说明是 10 以内
            return true;
        }
        // left > 0
        int right = 0;
        while(left > right) {
            int l = (x / (int)Math.pow(10, left)) % 10;
            int r = (x / (int)Math.pow(10, right)) % 10;
            if(l == r) {
                left --;
                right ++;
            } else {
                return false;
            }
        }
        return true;
    }
}

输出 1

img.png


解法 2 - 反转数字

class Solution {
    public boolean isPalindrome(int x) {
        // 思路:
        // 1234321 要想判断是否为回文串,
        // 可从低位开始,进行反转,得到 右四位的反转 1234
        // 和剩下的左四位进行比较
        // 12321 右四位的反转 123 左四位 12
        if(x < 0) {
            return false;
        }
        if(x == 0) {
            return true;
        }
        // 还需要判断一种特殊情况 x == 10
        if(x % 10 == 0) {
            return false;
        }
        // x > 0
        int sum = 0; // 由于只翻转一半长度是数字,因此绝对不会超范
        while(x > sum) {
            int cur = x % 10;
            sum = sum * 10 + cur;
            x /= 10;
        }
        if(sum == x) {
            // 偶数位回文串
            return true;
        }
        if(sum / 10 == x) {
            return true;
        }
        return false;
    }
}

输出

img_2.png

上次编辑于: 2022/6/20 下午8:24:47
贡献者: liuxianzhishou