1. 程式人生 > 其它 >C++ leetcode刷題覆盤3: palindrome number

C++ leetcode刷題覆盤3: palindrome number

技術標籤:Leetcode學習leetcodec++

參考資料:
https://www.cnblogs.com/whale90830/p/10531209.html
相關知識:
1.數值轉字串to_string()函式
2.return直接強制結束函式

解法一

使用字串轉換符to_string,注意return可以提前終止函式。

class Solution {
public:
    bool isPalindrome(int x) {   
        if (x<0){return false;}
        string x1 = to_string(x);
        for (int i = 0; i < x1.size()/2; i++)
        {
            if(x1[i]!=x1[x1.size()-1-i]){
                return false;
            }        
        }
        return true;        
    }
};

執行速度:
在這裡插入圖片描述

解法二

考慮使用翻轉函式思想,要注意翻轉之後Int資料可能會超出最大範圍。

class Solution {
public:
    bool isPalindrome(int x) {   
        if (x<0){return false;}
        long res = 0;//也有用long long 的
        int x1  = x ;
        while (x1>0){
            res = res*10+x1%10;
            x1 /= 10;
        }
        return res==x? true: false;
    }
};

執行速度:
在這裡插入圖片描述

解法三

參考官方題解,翻轉一半。

class Solution {
public:
    bool isPalindrome(int x) {   
        if (x<0 || (x%10==0&&x!=0)){return false;}//這裡意思是10這種,就直接排除掉
        int res = 0;
        while (x>res){//這裡限制了res不會突破int最大值
            res = res*10+x%10;
            x /= 10;
        }
        return res==x|| res/10==x;//針對x可能為奇數也可能為偶數
    }
};

執行速度:
在這裡插入圖片描述
好像慢一些。

覆盤

資料結構課要開始看起來了。