日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#算法之回文數_C#教程

作者:癡者工良 ? 更新時間: 2022-03-30 編程語言

回文數

判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例 1:

輸入: 121
輸出: true

示例?2:

輸入: -121
輸出: false
解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個回文數。

示例 3:

輸入: 10
輸出: false
解釋: 從右向左讀, 為 01 。因此它不是一個回文數。

進階:

你能不將整數轉為字符串來解決這個問題嗎?

代碼模板

public class Solution {
    public bool IsPalindrome(int x) {
        
    }
}

筆者的代碼

運行時間在120ms左右,筆者的思路是:如果一個數字的反序還是等于這個數,那么這個數就是回文數。

以下代碼無法解決反序后可能溢出,可以利用上一題的代碼進行溢出檢查。

當然,一個int類型的數,如果是回文,那么他的反序肯定不會溢出,反之其反序發生溢出則肯定不是回文數。

public class Solution
    {
        public bool IsPalindrome(int x)
        {
            if (x < 0) return false;
            int xx = x;
            int num = 0;  //x的反序
            while (xx != 0)    //求反序
            {
                int i = xx % 10;
                xx = xx / 10;
                num = num * 10 + i;
            }
            if (x == num)       //如果x的反序num==x,那么這個數字是回文數
                return true;

            else
                return false;

        }
    }

?加try-catch,耗時增加 10~20ms

try { 
            while (xx != 0)
            {
                int i = xx % 10;
                xx = xx / 10;
                num = num * 10 + i;
            }
            }
            catch
            {
                return false;
            }

官方這道題給出了示例代碼,耗時120ms左右,思路是只反序一半,反序后的原始數、反序一半的數進行比較,也就不用檢查溢出。

public class Solution {
    public bool IsPalindrome(int x) {
        // 特殊情況:
        // 如上所述,當 x < 0 時,x 不是回文數。
        // 同樣地,如果數字的最后一位是 0,為了使該數字為回文,
        // 則其第一位數字也應該是 0
        // 只有 0 滿足這一屬性
        if(x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int revertedNumber = 0;
        while(x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }

        // 當數字長度為奇數時,我們可以通過 revertedNumber/10 去除處于中位的數字。
        // 例如,當輸入為 12321 時,在 while 循環的末尾我們可以得到 x = 12,revertedNumber = 123,
        // 由于處于中位的數字不影響回文(它總是與自己相等),所以我們可以簡單地將其去除。
        return x == revertedNumber || x == revertedNumber/10;
    }
}

別人用字符串方式進行判斷(雖然題目說不能用string),耗時150-180ms,不太穩定

public class Solution
    {
        public bool IsPalindrome(int x)
        {
            string str = x.ToString();
            for (int i = 0; i < str.Length / 2; ++i)
            {
                if (str[i] != str[str.Length - 1 - i])
                {
                    return false;
                }
            }
            return true;
        }
    }

原文鏈接:https://www.cnblogs.com/whuanle/p/10352752.html

欄目分類
最近更新