LeetCode (9): Palindrome Number

 【目】LeetCode(9:  Palindrome Number

URL:   https://leetcode.com/problems/palindrome-number/

【描述】

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

【中文描述】

确定一个integer是否是回文数,类似于121,  2332, 1000001, 22这样的。做这个不使用额外空间!

————————————————————————————————————————————————————————————

【初始思路】

这个题我简直想杀人!!中文描述里,我故意直译了题目最后一句话,还专门用红色字体写出了这句话,就是这个要求折磨了我将近一天!!

Do this without extra space。这句话什么意思?我如果没有理解错,那就是不能使用额外空间!

什么是额外空间?我可以理解,除了x外,另外申请的都可以算作额外空间。哪怕是一个pointer,都是在栈里占用空间的啊! 这就意味着,你不能把integer转成string,不能获知这个integer的位数,你所有的代码,都只能用一个变量,就是这个x。

思来想去,想了一整天无果。最后,吃完晚饭,没办法,穷途末路了,心想一个easy题居然被我做成这样!还是回国吧,不要想google、facebook了。结果看了别人的答案,我简直疯掉!明明有用额外空间啊!有一个人还在discuss里问:”我这个题没有用额外空间么?为什么还是AC了?“  看来大家都和我一样的烦恼!

好吧,如果可以用额外空间,这个题就真是太简单了。不多分析了,直接上代码,case closed!

【Show me the Code!!!】

 1 public static boolean isPalindrome(int x) {
 2         if(x < 0) {return false;} //负数肯定不是,直接返回
 3         if(x >= 0 && x < 10) {return true;}//0-9肯定是,直接返回
 4 
 5         //正数情况
 6         String str = String.valueOf(x);
 7 
 8         int count = 0;
 9         int i = 0, j = str.length() - 1;
10         while(count < str.length() / 2) { //回文数,只需要匹配两边的就可以了. 奇数位数时,除去中间匹配两边.
11             if(str.charAt(i) == str.charAt(j)) {
12                 count++;
13                 i++;
14                 j--;
15             } else {
16                 return false; //一旦发现不匹配立马返回false
17             }
18         }
19         return true;
20     }
isPalindrome

【反思】

这个题让我认识到一个问题,实在想不出来的题还是赶紧看提示看discuss吧,毕竟面试的时候还可以和面试官沟通要tip的。死磕到最后只能是浪费时间!

原文地址:https://www.cnblogs.com/lupx/p/leetcode-9.html