leetcode:Palindrome Number

一、 題目

試確定一個整數是否爲迴文數。並不使用額外的空間。

提示:

負整數可能是迴文數嗎?(例如 -1

如果你想要將整數轉換成字符串,那麼你注意到不能使用額外的空間的限制。

可能你嘗試翻轉整數,但是,如果你已經解決這個問題“逆向整型”,你要知道,顛倒整數可能會溢出的情況。那麼你會如何處理這樣的情況呢?

要有解決這個問題的一種更通用的方法。

二、 分析

瞭解題目的意思後,其實問題本身很簡單的,一想到迴文數腦海中立刻想到翻轉整數、雙指針等方法,但是難度在它的提示,即不能使用額外的空間和溢出的情況。原本我看是整數,就想到使用itoa(),不過此時不能使用,使用翻轉整數的方法雖然提示會溢出,不過這是最初想到的方法,leetcode也過了,如下:

1、每次將flag求餘10,目標整數res = res * 10 + flag % 10

2、flag /= 10,直到爲0

3、判斷目標整數和原整數是否相等。

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        int flag = x;
        int res = 0;
        while(flag > 0){
        	res = res * 10 + flag % 10;
        	flag /= 10;
        }
        if(x == res) return true;
        return false;
    }
};

另外一種方法是首先求出x的階數count,比較x頭尾兩個對應的數字是否相等即可,如下:

1、求出x的階數count

2、比較x/count 和 x%10 不相等返回false

3、x %= countx /= 10count /= 100,直到x = 0;

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        int a = x;
        int count = 1;
        while(a >= 10){
        	count *= 10;
        	a /= 10;
        }
        while(x > 0){
        	if(x/count != x%10)
        		return false;
        	x %= count;
        	x /= 10;
        	count /= 100;
        }
        return true;
    }
};


發佈了164 篇原創文章 · 獲贊 18 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章