zoukankan      html  css  js  c++  java
  • LeetCode

    LeetCode - Palindrome Number

    2013.12.1 22:24

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

    click to show spoilers.

    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.

    Solution:

      Basic solution for this problem is to compare the digits at both ends of the number one by one, until all pairs are determined equal.

      Here are the special cases I've come up with:

        1. 0 is of course a palindrome.

        2. INT_MIN and INT_MAX, boundary values can be tricky.

        3. negative numbers like -121?

      Actually the first two case needs special treatment, as they won't work with the code below. The third case cost me 1WA to find out that -121 is not considered a palindrome by LeetCode OJ. For other numbers, the following code segment works just fine.

      Time complexity is O(lg(n)), space complexity is O(1).

    Accepted code:

     1 // 1RE, 1WA, 1AC  must be more careful
     2 class Solution {
     3 public:
     4     bool isPalindrome(int x) {
     5         // 1RE here, ignored the case of INT_MIN
     6         if(x == INT_MAX || x == INT_MIN){
     7             return false;
     8         }
     9         
    10         // IMPORTANT: Please reset any member data you declared, as
    11         // the same Solution instance will be reused for each test case.
    12         int high, low;
    13         
    14         if(x < 0){
    15             // 1WA here, seems negative number is not palindrome, that's unfair..
    16             return false;
    17         }
    18         
    19         if(x == 0){
    20             return true;
    21         }
    22         
    23         high = low = 1;
    24         while(x / high >= 10){
    25             high *= 10;
    26         }
    27         
    28         while(high > low){
    29             if(x / high % 10 != x / low % 10){
    30                 return false;
    31             }else{
    32                 // fixed, didn't cause a WA, lucky..
    33                 high /= 10;
    34                 low *= 10;
    35             }
    36         }
    37         
    38         return true;
    39     }
    40 };
  • 相关阅读:
    知识积累
    路由层
    数据表记录的增删改查
    连接数据库
    django数据请求
    力扣(LeetCode) 509. 斐波那契数
    力扣(LeetCode)69. x 的平方根
    力扣(LeetCode) 104. 二叉树的最大深度
    力扣(LeetCode) 27. 移除元素
    力扣(LeetCode) 136. 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3453093.html
Copyright © 2011-2022 走看看