Leetcode #9 Solution

// 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值