LeetCode.9 回文数

题目链接:

回文数

分析:

1. 首先判断该数字num有多少位

此处用一个循环,赋一个值div,用给出的数字num除以div,然后不断地给div乘10,直到div满足条件

2. 计算出最高位的数字left

用给出的数字num除以div(也就是num的位数),就可得到最高位left

3. 计算出最低位的数字right

用给出的数字对10取余,就可以计算出最低位的数字right

4. 此时应判断最高位是否等于最低位 left ?= right

如果不等于返回false

5. 继续判断除最高位最低位里面的数字,更新num

此时新的num应该是除减去最高位最低位的数字后的数字

如 45678,减去最高位4和最低位8后,更新后的num应该是567

具体实现为 num = (num - left*div) / 10

然后进行新一轮的判断

代码实现如下:

public class HuiWen {
    public boolean isPalindrome(int x) {
        if (x < 0)
            return false;
        int num = x;
        int div = 1;
        // 计算 num的位数
        while (num / div >= 10) {
            div *= 10;
        }
        while (num != 0) {
            int left = num / div;
            int right = num % 10;
            if (left != right)
                return false;
            // 更新 num
            num = (num - left*div) / 10;
            // 上面已经减去最左边和最右边的数字了,
            // 所以位数相应的要小两位,即除100
            div /= 100;
        }
        return true;
    }
}

 

全部评论

相关推荐

04-12 13:42
江南大学 C++
点赞 评论 收藏
分享
05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务