剑指offer专项突击版刷题总结
2022-08-14
刷题
题解总结
- 整数除法
最后是都要取绝对值计算,先把特殊情况考虑到了;模拟草稿纸上的除法运算,比如10000/23,在百位上写4,余数就不可能在百位上写值了,是一个依次向低位上写值的过程,二进制一样
class Solution {
public int divide(int a, int b) {
int ans = 0;
if(b == Integer.MIN_VALUE){
return a == Integer.MIN_VALUE ? 1 : 0;
}
if(a == Integer.MIN_VALUE){
if(b == -1){
return Integer.MAX_VALUE;
}else if(b == 1){
return Integer.MIN_VALUE;
}else{
a += Math.abs(b);
ans += 1;
}
}
//对布尔值可以做位运算,结果还是布尔值
//int flag = (a >>> 31) ^ (b >>> 31)
boolean flag = (a > 0) ^ (b > 0);
a = Math.abs(a);
b = Math.abs(b);
for(int i=31; i>=0; --i){
if((a >>> i) >= b){
ans += (1 << i);
a -= (b << i);
}
}
return flag ? -ans : ans;
}
}