9. 回文数(Java)三种方法

2019-08-18  本文已影响0人  软萌白甜Hedy

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:你能不将整数转为字符串来解决这个问题吗?

解题

方法一:反转整数

public boolean isPalindrome(int x) {
      //看完这道题,首先想到的是跟昨天的反转整数类似的想法,
        // 即反转之后判断跟原数是否相等,即相等就是回文数;
        //先排除几种特殊情况:
        if(x<0){
            return false;
        }
        if(x==0){
            return true;
        }
        int rev= 0;
        int tmp = x;
        while (tmp!=0){
            int p = tmp%10;
            tmp=tmp/10;
            rev = rev * 10 +p ;
        }
        return rev ==x;
}

结果

执行用时 :15 ms, 在所有 Java 提交中击败了92.36%的用户
内存消耗 :37.9 MB, 在所有 Java 提交中击败了85.99%的用户

方法二:转化成字符串

public boolean isPalindromeToString(int x){
        //将x转化成字符串
        String s = String.valueOf(x);
        //两个指针,一个从0开始 ,一个从末尾开始
        int i = 0;
        int j = s.length()-1;
        //i++和j--循环,拿出每一位比较,如果不相等,则不是回文数
        while(i<j){
            if(s.charAt(i++)!=s.charAt(j--)){

                return false;
            }
        }
        return true;
}

结果

执行用时 :19 ms, 在所有 Java 提交中击败了88.43%的用户
内存消耗 :38.6 MB, 在所有 Java 提交中击败了84.85%的用户

方法三:转化成char数组

public boolean isPalindromeToChar(int x ){
       //排除特殊情况
       if(x<0||x%10==0 && x!=0){
           return false;
       }
       Boolean result= false;
        //转为数组
       char[] chars = String.valueOf(x).toCharArray();
        //从第一位和最后一位开始循环比较
       for(int i =0;i<chars.length;i++){
            if(chars[i]==chars[chars.length-1-i]){
                result= true;
            }else {
                result= false;
                break;
            }
       }
       return result;
}

结果

执行用时 :22 ms, 在所有 Java 提交中击败了86.39%的用户
内存消耗 :39.4 MB, 在所有 Java 提交中击败了80.84%的用户

上一篇 下一篇

猜你喜欢

热点阅读