題目地址:
https://www.lintcode.com/problem/update-bits/description
給定兩個位整數和,再給定兩個取值在的兩個整數和,並且,要求將的右數第到位改變爲,題目保證的二進制表示的長度正好是。
思路是,先將的第到位都變爲,然後將左移位再與或起來即可。代碼如下:
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
// 構造二進制表示爲j - i + 1個1組成的數
int ones = ~0 >>> (32 - (j - i + 1));
// 將n的第i到j位改爲0
n = n & (-1 - (ones << i));
// 將m左移i位再與n或
n |= m << i;
return n;
}
}
時空複雜度。