Lexi's Leetcode solutions

[leetcode] Palindrome Number | 看一个整数是不是中心对称

Posted on: August 3, 2013

这题八月份做的太复杂了,中心思想还是如何render两头的digit,不过leetcode的方法最简单:

  1. 最左边的digit = x / 1000..(长度为x的长度)
  2. 最右边的digit= x % 10
  3. 然后把x两头chop掉。这个做的挺巧妙的,先是x = x % 1000…,把后几位留下,然后x / 10,把最后一位扔了。
  4. 感觉还是对除、余不熟练。记住x/10000..最长就是10000..那么长。所以%10就是显示一位。%是要后面的,/是要前面的。
public boolean isPalindrome(int x) {
    if (x < 0)
        return false;
    int len = 0, temp = x;
    while (temp > 0) {
        temp /= 10;
        len++;
    }
    int pow = (int)Math.pow(10, len - 1);
    while (x > 0) {
        int firstDigit = x / pow;
        int lastDigit = x % 10;
        if (firstDigit != lastDigit)
            return false;
        x = (x % pow) / 10; //chop first then chop last;
        pow /= 100; //two digits gone, so pow shrinks by 100 times
    }
    return true;
}

——————————————————————–八月份——————————————————————-

这题其实思路挺简单,就是不断把两头的digit(通过/10^x, %10^y)弄出来比较,若有不等的时候,就返回false。

重点是怎么render两头的digit。index什么的非常容易错位,写出来了其实也不直观make sense,所以一定要写好了算法之后,自己好好试试,跑几个case才能发现问题。

int i = 1;
while (i <= bitCount / 2) {
  int tenPowerI = (int) Math.pow(10, i); // 10^i
  int p = x % tenPowerI; //p = x % 10^i
  p = p * 10 / tenPowerI; //p = p / 10^(i - 1), render the first digit of p

  int tenPowerBitCountMinusI = (int) Math.pow(10, bitCount - i); //10^(bitCount - i)
  int q = x / tenPowerBitCountMinusI; // q = x / 10^(bitCount - i))
  q = q % 10; //render the last digit of q

  if (p != q)
    return false;
  i++;
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: