Basic Math Knowledge

数字类的的问题主要考察的有以下几点

  • overflow问题:MAX 和 MIN的处理
  • 0 如何处理
  • 负数的处理
  • 小数的处理

防止overflow有个非常巧妙的判断方法:

本来我们是要判断res*10+num%10>MAX_VALUE对吧? 因为如果乘起来越界那么就错了,为了防止越界,就把他们移到右边去,就变成 res > (MAX_VALUE - num % 10) / 10

罗马字符对应表

进制转换

举例:将十进制的10转换为二进制

第一步,将商10除以2,商5余数为0;

第二步,将商5除以2,商2余数为1;

第三步,将商2除以2,商1余数为0;

第四步,将商1除以2,商0余数为1;

第五步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数

Convert 26-base number to 10-base number.

  1. Excel Sheet Column Number

key point: num += (c - 'a' + 1) * Math.pow(26, (s.length() - 1 - i))

Think about how do you represtation the 10-base number.

123 = 1 * 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0

Reverse Integer

如何处理越界问题

public class Solution {
    public int reverse(int x) {
        // special case
        if(x == Integer.MIN_VALUE) {
            return 0;
        }

        int num = x;
        num = Math.abs(num);

        int result = 0;

        while(num != 0) {
            // 每reverse一位的时候都要判断一些,reverse后会不会越界
            // result * 10 + num % 10 > MAX的变形,这样可以保证result不会越界
            if((Integer.MAX_VALUE - num % 10) / 10 < result) {
                return 0;
            }

            result = result * 10 + num % 10;
            num /= 10;
        }

        return x > 0 ? result : -result;
    }
}

results matching ""

    No results matching ""