翻譯
確定一個整數是否是回文數。不能使用額外的空間。
一些提示:
負數能不能是回文數呢?(比如,-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;
}
}
}