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.
- 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;
}
}