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 };
  • 相关阅读:
    jQuery:提交表单前判断表单是否被修改过
    jQuery multiselect的使用
    input[file]标签的accept=”image/*”属性响应很慢的解决办法
    Linux-read命令
    shell编程学习
    优化网站加载速度
    select下拉框选中问题
    QTableWidget class
    QLabel class
    QMainWindow class
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3453093.html
Copyright © 2011-2022 走看看