LeedCode(9) 回文数

题目

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:

你能不将整数转为字符串来解决这个问题吗?

思路:

1,首先不能转字符串(如果转换成字符串是不是就简单了)
2,这里其实只需要对数字的一半进行比较就行了 ,我这里采用的是对数字的后半部分进行旋转,然后跟前半部分比较。这时一个问题就出现了,就是怎么只对数字的后半部分反转,可以跟前半部分的数字进行大小的比对 如果出现前半部分小于等于后半部分就ok了;
3,比较,分两种情况,一种的数字的位数是偶数位,那么转换的结果一定是前后部
分相等。如果是奇数位数,那么后半部分比前半部分多了最后一位。

解答

class Solution {
    public boolean isPalindrome(int x) {
        //小于0 的  因为有个-符号  所以一定不是
        if(x <0){
            return false;
        }
  //等于0是回文数
        if(x == 0){
            return true;
        }
        //如果最后一位是0 那么也肯定不是回文数了。但是这个判断一定要在等于0后面
        if(x%10 == 0){
            return false;
        }
        
        //定义一个数字  用于记录后半部分转换后的结果
        int val = 0;
            
       //当前半部分小于后半部分的时候  循环结束
        while(val < x){
            val = val*10 + x%10;
            x = x/10;
            
        }
        //判断,考虑后半部分比前半部分多一位数的情况
        return x == val || x == val/10;
        
    }
}

复杂度

时间复杂度:O(log(n)),n代表了数字的位数
空间复杂度:O(1)

你可能感兴趣的:(LeedCode(9) 回文数)