原题链接: http://www.lintcode.com/zh-cn/problem/update-bits/
给出两个32位的整数N和M,以及两个二进制位的位置i和j。写一个方法来使得N中的第i到j位等于M(M会是N中从第i为开始到第j位的子串)
样例
给出N = (10000000000)2,M = (10101)2, i = 2, j = 6
返回 N = (10001010100)2
分析:
如果是两个二进制的字符串,结果就是遍历数组然后对应的位替换。因此将该题抽象为先得到二进制的字符串,替换之后,将二进制的字符串再次转换为整数
遇到的问题
发现在移位操作有问题,例如flag<<1,在visualstdio和lintcode编译环境中,都无法执行的样子。因此采用flag = flag*2来代替
class Solution {
public:
/**
*@param n, m: Two integer
*@param i, j: Two bit positions
*return: An integer
*/
int updateBits(int n, int m, int i, int j) {
// write your code here
int flag = 1;
string str_m = "";
string str_n = "";
while(flag){
if( (m & flag) == 0)
str_m+='0';
else{
str_m+='1';
}
flag = flag*2;
}
flag = 1;
while(flag){
if( (n & flag) == 0)
str_n+='0';
else{
str_n+='1';
}
flag = flag*2;
}
for(int k = i; k <= j; k++){
str_n[k] = str_m[k-i];
}
int result = 0;
int count = 1;
for(int p = 0; p < str_n.length(); p++){
if(str_n[p] == '1')
result += count;
count*=2;
}
return result;
}
};