leetcode之回文总结(一)

  • 回文数简单来说就是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
  • 如果是判断一个数是不是回文,我们很容易想到的就是利用双指针,那么如果题目给你的本身就是字符串那好比较容易操作,直接利用一个头指针指向字符串的头部,利用一个尾指针指向字符串的尾部,然后判断这两个指针指向的字符是否一致,不一致直接返回false;一致情况下,两个指针同时向中间移动,继续以上操作。
  • 但是如果给你的是数字,那么也可以转换成字符串,然后像上面一样操作;
class Solution {
    public boolean isPalindrome(int x) {
        //双指针
        String str = String.valueOf(x);
        int len = str.length();
        if(len == 0){
            return true;
        }
        int head = 0;
        int tail = len - 1;
        while(head < tail){
            if(str.charAt(head) != str.charAt(tail)){
                return false;
            }
            head++;
            tail--;
        }
        return true;
    }
}
  • 但是仔细想想,这个题目貌似还有更好地办法。下面是我在leetcode上看题解时发现的,现在拿过来做个笔记吧
    作者原文链接
    思路
//方法一:
class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0) return false;
        int div = 1;
        while((x / div) >= 10){
            div *= 10;
        }
        while(x > 0){
            int left = x / div;
            int right = x % 10;
            if(left != right) return false;
            // x = (x - div * left) / 10;
            x = (x % div) / 10;
            div /= 100;
        }
        return true;
    }
}

//方法二:
class Solution {
    public boolean isPalindrome(int x) {
    //这里解释一下为什么x的最后一位为0就是可以返回false(前提是x!=0)
    //因为在x!=0的时候,x的首位数字一定不会是0,所以x的最后一位为0就可以表明这个不是回文了
        if(x < 0 || (x != 0 && (x % 10 == 0))){
            return false;
        }
        int right = 0;
        while(x > right){
            right = right * 10 + x % 10;
            x = x / 10;
        }
        return x == right || x == right / 10;
    }
}

猜你喜欢

转载自blog.csdn.net/harryshumxu/article/details/105289130