LeetCode9回文数

76 阅读1分钟

🍀回文数

描述:

 # 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
 ​
 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
 ​
 例如,121 是回文,而 123 不是。
  
 ​
 示例 1:
 ​
 输入:x = 121
 输出:true
 示例 2:
 ​
 输入:x = -121
 输出:false
 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
 示例 3:
 ​
 输入:x = 10
 输出:false
 解释:从右向左读, 为 01 。因此它不是一个回文数。
  
 ​
 提示:
 ​
 -231 <= x <= 231 - 1
 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思考:

回文数也是属于基础题的一种,可以直接想到的两种方法就是把数取模放在数组中再判断数组是不是对称的就可,还有一种方法是利用java库中的方法转换为字符数组再判断是否对称。但是这两种方法虽然简单但是性能很差劲。

实现:

 class Solution {
     public boolean isPalindrome(int x) {
 ​
         if (x < 0)
             return false;
 ​
         String s = String.valueOf(x);
         char[] charList = s.toCharArray();
 ​
         for (int i = 0; i < charList.length / 2 ; i++) {
             if (!(charList[i] == charList[charList.length-1-i])) {
                 return false;
             }
         }
 ​
 ​
         return true;
 ​
     }
 }

测试一下!

image.png

大佬的代码:

此方法是取模后再进行累加,最后判断是不是和之前的相等的方法,但是感觉这个方法有点瑕疵,可能会有溢出风险。

第二个方法更好,它只需要对比一半就可以了,很简洁。

 class Solution {
     public boolean isPalindrome(int x) {
         if(x<0)
             return false;
         int rem=0,y=0;
         int quo=x;
         while(quo!=0){
             rem=quo%10;
             y=y*10+rem;
             quo=quo/10;
         }
         return y==x;
     }
 }
 class Solution {
     public boolean isPalindrome(int x) {
         if (x == 0) return true;
         if (x < 0 || x % 10 == 0) return false;
         int reversed = 0;
         while (x > reversed) {
             reversed = reversed * 10 + x % 10;
             x /= 10;
         }
         return x == reversed || x == reversed / 10;
     }
 }

\