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 }
原文:http://www.cnblogs.com/longhorn/p/3542214.html