力扣刷題---回文數 擊敗100%用戶的解法

題目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数

是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

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

示例 3:

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

此題就是得到每個位置的數字,然後將其拼接與原數進行比較即可判斷是否為回文數。難點在於取出每個位置的數,下面是一種較為巧妙的取數方法。

思路:我們先對數據除10取餘(%10),即可得到個位的數字,然後再進行除操作( /10),去掉所給數據個位的數字,再對數字拼接到最左邊,然後下一次我們再按照以上操作,就可以得到十位的數,以此反復,我們就可以得到數據每個位置的數字了,然後進行拼接即可進行比較判斷是否為回文數。

        這裡有個難點就是,我們如何得到拼接後的數據了,如果是乘10,乘100的這樣子去拼接,會顯得比較複雜,但也是能做。我們這裡先定義了一個變量num用於記錄拼接後的數據,令其初始值為0,第一次得到個位數時,我們就令num=num*0+ge。這樣利用循環,就很好的將數字拼接起來了。

擔心小白不理解,我們以1234為例,第一次取得個位的數字4,num=num*10+4=4,第二次我們可以得到3,num=4*10+3=43,第三次可以得到2,num=43*10+2=432,最後就順利得到4321。

下面是實現代碼:

class Solution {

    public boolean isPalindrome(int x) {   

        //設置臨時變量,用於記錄原本的x

        int temp=x;

        //設置變量用於記錄拼接後的數字,方便進行比對

        int num=0;

        //多位數字利用for循環從右往左獲取每一位數字

        while (x!=0&&x>0){

            //從右往左獲取每一個數字

            int ge =x%10; //獲取個位的數字

            //對數據進行處理方便下一次循環取出十位的數字

            x=x/10;   //去掉了個位的數,x減少一位,下一次循環取得的即為十位

            //把當前獲取到的數字拼接到最左邊

            num=num*10 +ge ;

        }

    

        //比較

        if(num==temp&&temp>=0){  //注意負數和不等於0的情況

            return true;

        }else {

            return false;

        }       

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值