程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode 9 Palindrome Number (回文數)

LeetCode 9 Palindrome Number (回文數)

編輯:C++入門知識

LeetCode 9 Palindrome Number (回文數)


翻譯

確定一個整數是否是回文數。不能使用額外的空間。

一些提示:

負數能不能是回文數呢?(比如,-1)

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

你也可以考慮翻轉一個整數。
然而,如果你已經解決了問題“翻轉整數(譯者注:LeetCode 第七題),
那麼你應該知道翻轉的整數可能會造成溢出。
你將如何處理這種情況?

這是一個解決該問題更通用的方法。

原文

Determine whether an integer is a palindrome. Do this without extra space.

Some hints:

Could negative integers be palindromes? (ie, -1)

If you are thinking of converting the integer to string, note the restriction of using extra space.

You could also try reversing an integer. 
However, if you have solved the problem Reverse Integer, 
you know that the reversed integer might overflow. 
How would you handle such case?

There is a more generic way of solving this problem.

一開始的想法,大不了不新建一個字符串,直接在循環裡用就好了,結果居然也可以accept。

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

可是叻:

11506 / 11506 test cases passed.
Status: Accepted
Runtime: 244 ms
Your runtime beats 0.97% of csharp submissions.

然後修改了一下:

public class Solution
{
    public bool IsPalindrome(int x)
    {       
        if (x < 0)
            return false;       
        // 判斷x的長度,比如x=232,div就等於100
        int div = 1;
        while (x / div >= 10)
            div *= 10;      
        while (x != 0)
        {
            // 左邊開始計數
            int left = x / div;
            // 右邊開始計數
            int right = x % 10;      
            if (left != right)
                return false;    
            x = (x % div) / 10;
            div /= 100;
        }
        return true;   
    }
}

性能還是不盡如人意呀,不過同樣的代碼放在Java上,貌似C#要快一些。


11506 / 11506 test cases passed.
Status: Accepted
Runtime: 196 ms
Your runtime beats 21.36% of csharp submissions.

下面這份代碼是網上找到的,性能和上面的一模一樣:

public class Solution
{
    public bool IsPalindrome(int x)
    {
        if (x < 0)
            return false;
        else if (x == 0)
            return true;
        else
        {
            int tmp = x;
            int y = 0;
            while (x != 0)
            {
                y = y * 10 + x % 10;
                x = x / 10;
            }
            if (y == tmp)
                return true;
            else
                return false;
        }
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved