剑指offer专项突击版刷题总结
2022-08-14  刷题

题解总结

  1. 整数除法

最后是都要取绝对值计算,先把特殊情况考虑到了;模拟草稿纸上的除法运算,比如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;
    }
}