Saturday, February 17, 2018

179 Update Bits


解法理解
~0 = 11111111111111111111111111111111(32bit)
left = ~0 << (j+1);    // 111111111111100000000000000000000(32-(j+1) number of 1)
right = (1 << i) -1;    //  00000000000000000000000000000011
mask = left | right     //  111111111111100000000000000000011(32bit mask)

      原数 & mask  // 原数left 0000000000000000 原数right
or  替换数 << i    // 不要重叠原数right
-----------------------------
原数left 替换数 原数right



WA:
[-521, 0, 31, 31]
[-123, 45, 21, 26]
public class Solution {
    /**
     * @param n: An integer
     * @param m: An integer
     * @param i: A bit position
     * @param j: A bit position
     * @return: An integer
     */
    public int updateBits(int n, int m, int i, int j) {
        // write your code here
        int all_Ones = ~0;
        int mask = 0;
        if(j<31){
            int left = all_Ones << (j + 1);
            int right =  ((1 << i)-1);
            mask = left | right;
        }else{
            mask = ((1 << i)-1);
        }
        
        int maskedN = n & mask;
        int replaceM = m << i;
        return maskedN | replaceM;
        
        
    }
}

No comments:

Post a Comment