a***e 发帖数: 413 | 1 我觉得思路很简单,就是程序写不对。
下午还特别犯困,看到别的答案很简洁,自己的程序怎么调都通不过。
很郁闷。请问这种情况下自己花很多时间一步一步debug把程序写对到底值不值,还是
干脆找个标准答案记下来算啦?多谢指点。准备面试备受打击,觉得花在PH.D上的时间
还不如来趁年轻刷题啊。
bool isPalindrome(int x) {
if (x<0) return false;
if (x/10<1) return true;
int t = 1;
while(x/t>1)
t=t*10;
int a=1, b=t/10;
int left, right;
while (a<=b)
{
left = x/b;
right= (x%(a*10))/a;
if (left!=right)
return false;
else
{
x = x-left*b;
a=a*10;
b=b/10;
}
}
return true;
} |
e*******s 发帖数: 1979 | 2 当然要把程序调对 写程序很容易 debug才是最考验功力的
写好的程序用自己用例在脑子里面run一下
【在 a***e 的大作中提到】 : 我觉得思路很简单,就是程序写不对。 : 下午还特别犯困,看到别的答案很简洁,自己的程序怎么调都通不过。 : 很郁闷。请问这种情况下自己花很多时间一步一步debug把程序写对到底值不值,还是 : 干脆找个标准答案记下来算啦?多谢指点。准备面试备受打击,觉得花在PH.D上的时间 : 还不如来趁年轻刷题啊。 : bool isPalindrome(int x) { : if (x<0) return false; : if (x/10<1) return true; : : int t = 1;
|
f******s 发帖数: 659 | 3 //use recursion
boolean isPalindrome(int num){
if(num<0) return false;
if(num<10) return true;
int length = (int) Math.log10(num) +1; //how many digits?
//compare the 1st and last digit
if (num/((int) Math.pow(10, length-1))!=num%10)
return false;
//chop off the 1st and last digit
return isPalindrome (((int)(num%(Math.pow(10, length-1))))/10);
} |
f******s 发帖数: 659 | 4 //use string
boolean isPalindrome(int num){
String numStr = String.valueOf(num);
String revStr = new StringBuilder(numStr).reverse().toString();
return numStr.equals (revStr);
} |
s**x 发帖数: 7506 | 5 思路应该是对的,用的额外变量太多了,只用一个顶多两个应该就行了。
★ 发自iPhone App: ChineseWeb 8.7
【在 a***e 的大作中提到】 : 我觉得思路很简单,就是程序写不对。 : 下午还特别犯困,看到别的答案很简洁,自己的程序怎么调都通不过。 : 很郁闷。请问这种情况下自己花很多时间一步一步debug把程序写对到底值不值,还是 : 干脆找个标准答案记下来算啦?多谢指点。准备面试备受打击,觉得花在PH.D上的时间 : 还不如来趁年轻刷题啊。 : bool isPalindrome(int x) { : if (x<0) return false; : if (x/10<1) return true; : : int t = 1;
|
s**x 发帖数: 7506 | 6 Probably the most inefficient method.
★ 发自iPhone App: ChineseWeb 8.7
【在 f******s 的大作中提到】 : //use recursion : boolean isPalindrome(int num){ : if(num<0) return false; : if(num<10) return true; : : int length = (int) Math.log10(num) +1; //how many digits? : : //compare the 1st and last digit : if (num/((int) Math.pow(10, length-1))!=num%10) : return false;
|
s**x 发帖数: 7506 | 7 This one actually pretty smart.
★ 发自iPhone App: ChineseWeb 8.7
【在 f******s 的大作中提到】 : //use string : boolean isPalindrome(int num){ : String numStr = String.valueOf(num); : String revStr = new StringBuilder(numStr).reverse().toString(); : return numStr.equals (revStr); : }
|
A*****i 发帖数: 3587 | 8 Are you kidding me ? 题目好像要求不能转成string,你做过这题没啊
【在 s**x 的大作中提到】 : This one actually pretty smart. : : ★ 发自iPhone App: ChineseWeb 8.7
|
f******s 发帖数: 659 | 9 //no recursion, no string manipulation
//space O(1), time O(n)
boolean isPalindrome(int num){
if(num<0) return false;
int rev = 0; //reverse num
int num0 = num; //original value
while (num>0){
rev = rev * 10 + num % 10; //get the rightmost digit of num
num /= 10;
}
return rev==num0;
} |
a***e 发帖数: 413 | |
|
|
f******s 发帖数: 659 | 11 Thanks! It took 3 attempts, as you can see. :)
【在 a***e 的大作中提到】 : 啊,这个写得真好
|
a***e 发帖数: 413 | 12 会不会有overflow的问题呢?比如1000000003在32位机器上。 |
R*****i 发帖数: 2126 | 13 楼主的code,
while(x/t>1)
==》
while (x >= t) 或者 while (x > t)
但是显然这个算法很坏。 |
a***e 发帖数: 413 | 14 算法很坏?是说这个算法很差?下面这个是对的
bool isPalindrome(int x) {
if (x<0) return false;
int d=1;
while(x/d>=10)
{
d*=10;
}
while(x>0)
{
int q=x/d;
int r=x%10;
if (q!=r)
return false;
else
{
x=(x%d)/10;
d=d/100;
}
}
return true;
} |
R*****i 发帖数: 2126 | 15
真他娘的见鬼了,我把
while(x/d>=10)
换成
while(d*10<=x)
被告知Time Limit Exceeded
是楼主人品好还是编译器优化了? 哪位大牛能解释一下?
【在 a***e 的大作中提到】 : 算法很坏?是说这个算法很差?下面这个是对的 : bool isPalindrome(int x) { : if (x<0) return false; : : int d=1; : while(x/d>=10) : { : d*=10; : } :
|