Leetcode #9 Solution

来源:互联网 发布:优酷 java待遇 编辑:程序博客网 时间:2024/05/17 06:47

// Rewrite in Markdown mode. 16/9/13

Problem Description

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

Some Details

  • What is the meaning of ‘extra space’?
  • Try to use less variables to solve this problem.

Solution

  • Compare the digits one by one. The first with the last, the second with the second to last and so on…
  • How to get each digit?
  • For a number ‘x’, x=x0+x1*10+x2*10^2+…+xn*10^n. (xi means the ith digit in ‘x’)
  • So xi=x % [10^(i+1)] / (10^i). With this formula, you could solve this problem.
  • However, Suppose i=n, xn=x % [10^(n+1)] / (10^n).
  • 10^(n+1)>x. So 10^(n+1) may cause overflow, you need a special sentence for it.

I use 5 variables to solve this problem. And the time complexity is O(N^2)(N is the length of x). I am still trying to solve it better.
// 1 variable and O(N) to solve it. Read “Leetcode #9 Discussion”.
You could find more details in my code.

Code

    bool isPalindrome(int x)     {        if(x<0) return false;        int i,j,t,l,a;        i=x; j=0;        while (i) { j++; i/=10;}        for (i=1;i<=j/2;i++)        {            l=1;            for (t=1;t<=i;t++) l*=10;            a=x %l/(l/10);            if (i==1)            {                for (t=i+1;t<=(j-i);t++) l*=10;                if (a!=x/l) return false;            }else            {                for (t=i+1;t<=(j-i+1);t++) l*=10;                if (a!=x %l/(l/10)) return false;            }        }        return true;    }
0 0