LeetCode算法题 —— 回文数

LeetCode算法题 —— 回文数

题目

回文数,即一个整数,将它各位上的数字从左到右反过来得到的数字依然等于原来的整数。如1221反过来还是1221,所以它是回文数。而-11反过来是11-,所以不是回文数。那么如何判断一个整数是不是回文数?

思路

第一种思路

将数字转换为字符串,然后反转字符串,再与之前的比较看是否相等。

第二种思路

将整数最高位的数字取出,和整数末位的数比较是否相等,如果相等再取出第二位和倒数第二位的数字进行比较,依次类推。

代码

1.转换为字符串

public Boolean isPalindrome(int x) {
        //转换为字符串
        StringBuffer numStr = new StringBuffer(x+"");
        //字符串反转
        StringBuffer reverseNumStr = numStr.reverse();
        //比较
        if (numStr.equals(reverseNumStr)) {
            return true;
        }
        return false;
    }

2.取各位上的数字进行比较

public Boolean isPalindrome(int x) {
        //负数不可能是回文数
        if (x < 0) {
            return false;
        }
        //尾数为0不可能是回文数,0除外。
        if (x % 10 == 0 && x != 0) {
            return false;
        }
        //循环取出首位和末位的数字进行比较
        int a = 10;
        //个位数肯定是回文数
        if (x/a == 0) {
            return true;
        }
        while (x/a >= 10) {
            a = a*10;
        }
        while (x > 0) {
        	//考虑121这种情况
            if (a == 1) {
                return true;
            }
            
            int left = x / a;
            int right = x % 10;
            x = x % a;
            x = x / 10;
            if (left != right) {
                return false;
            }
            a = a / 100;
            
        }
        return true;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章