LeetCode: Palindrome Number

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

题很简单,但我做的不好。我最开始竟然没有想到把这个数反过来,然后判断是否和原来相等这种方法。我最开始竟认为这么做不出来。。。。

然后我就想用第一位与最后一位比较是否相等。然后再比较第二位最倒数第二位。后来感觉写的太乱了,也没通过测试。

最后用数字转为String的方法做了一个。

然后上网看了看,意识到原来把数字反过来是可以判断palindrome的。。。然后写了一个。

然后发现网上说,这么做可能会overflow (在reverse Integer中也是这样的,所以在那个题里也要判断是否overflow),还是要一位一位的比较。我原来是用递归写的,这里网上是用循环写的。

他也用了一种递归的方法,但是我没看懂。。。

http://leetcode.com/2012/01/palindrome-number.html#comment-11400

 1 bool isPalindrome(int x) {
 2   if (x < 0) return false;
 3   int div = 1;
 4   while (x / div >= 10) {
 5     div *= 10;
 6   }        
 7   while (x != 0) { //以前我都是判断是不是最后一位,然后最后一位单独处理。这个方法比较好。
 8     int l = x / div;
 9     int r = x % 10;
10     if (l != r) return false;
11     x = (x % div) / 10;
12     div /= 100;
13   }
14   return true;
15 }

 

 

posted on 2014-02-10 03:30  longhorn  阅读(202)  评论(0编辑  收藏  举报

导航