小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

回文數(shù) Leecode 9. Palindrome Number

 印度阿三17 2019-03-09

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121
Output: true
Example 2:

Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:

Input: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:
Coud you solve it without converting the integer to a string?

我們先寫幾個數(shù)字:

-12321 //不是回文數(shù)
6 //是回文數(shù)
10 //不是回文數(shù)
123454321 //是回文數(shù)
12344321 //是回文數(shù)

??設(shè)傳入的數(shù)為x。這里我們需要判斷一個數(shù)是否為回文數(shù),首先小于10的數(shù)肯定是回文數(shù),負(fù)數(shù)肯定不是回文數(shù),十的倍數(shù)肯定不是回文數(shù),這里我們可以提前確定。

if(x<0) return false;
if(x<10) return true;
if(x==0) return false;

??以上條件是可以一眼看出來的,那大于10的回文數(shù)怎么判斷呢,可以觀察一下回文數(shù)的特性。

??123454321

??最高位等于最低位,次高位等于次低位,依次下去。我們想取得高位很麻煩,取到低位倒是很簡單,可以用x。在用x/=10,我們可以通過循環(huán)依次獲取到1,2,3,4,5,4,3,2,1。我們將這些獲得到的數(shù)字*10 下一位到最后不就是x?這種辦法是行的通的。

class Solution{
    public boolean isPalindrome(int x) {
        if (x < 0 || (x != 0 && x == 0)) return false;//小于0,10的倍數(shù)都不是回文數(shù)
        if (x < 10) return true;//小于10大于等于0的是回文數(shù)
        int num = 0;
        int temp = x;
        while (x != 0){
            num = num*10   x;//從最低位開始算x的倒置值
            x = x/10;
        } 
        return num==temp;//如果倒置值等于x的值則是回文數(shù)返回true,否則false
    }
}

??這個方法將整個回文數(shù)都遍歷一遍,很明顯回文數(shù)是具有對稱性的,有沒有什么辦法可以只遍歷一半的回文數(shù)解決問題。

??如果回文數(shù)位數(shù)是偶數(shù)位的話,例如123321,我們從最低位算倒置數(shù)時,遍歷到一半,123 等于此時x(123),此時可以判定123321是回文數(shù)。

??如果回文數(shù)位數(shù)是奇數(shù)位的話,例如1234321,我們從最低位算倒置數(shù)時,遍歷到一半,123 等于此時x(1234),此時怎么判定呢?不管中間數(shù)(4)是多少只要此時倒置數(shù)等于x/10也能判定此數(shù)是回文數(shù)。

class Solution{
    public boolean isPalindrome(int x) {
        if (x < 0 || (x != 0 && x == 0)) return false;
        if (x < 10) return true;
        int num = 0;
        while (x > num){//此時num不能大于x
            num = num*10   x;
            x = x/10;
            if(num == x/10)return true;//奇數(shù)位回文數(shù)會在這里退出
        } 
        return x == num;//偶數(shù)位回文數(shù)會在這里退出
    }
}

??另一種寫法:因為num不能大于等于x,num >= x時會跳出循環(huán),此是如果x == num/10也是回文數(shù)(此時回文數(shù)是奇數(shù)位)。num == x時也是回文數(shù)(此時回文數(shù)是偶數(shù)位)。

class Solution{
    public boolean isPalindrome(int x) {
        if (x < 0 || (x != 0 && x == 0)) return false;
        if (x < 10) return true;
        int num = 0;
        while (x > num){
            num = num*10   x;
            x = x/10;
        } 
        return x == num || x == num/10;
    }
}
來源:http://www./content-4-135251.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多