解法理解
~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