美文网首页
LeedCode(9) 回文数

LeedCode(9) 回文数

作者: 桃花岛张岛主 | 来源:发表于2019-08-21 14:18 被阅读0次

    题目

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

    示例 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) 回文数

          本文链接:https://www.haomeiwen.com/subject/bribsctx.html