1.トピックの紹介
インサート。2つの32ビット整数NとM、およびビット位置を表すiとjが与えられます。MをNのj番目の位置で開始し、i番目の位置で終了するようにMをNに挿入するメソッドを記述します。jからiまでがMを収容するのに十分であると仮定します。つまり、M = 10 011の場合、jとiの間に少なくとも5ビットを収容できます。たとえば、Mを3桁目と2桁目の間に配置できないため、j = 3とi = 2にすることはできません。
例1:
入力:N = 1024(10000000000)、M = 19(10011)、i = 2、j = 6
出力:N = 1100(10001001100)
例2:
入力:N = 0、M = 31(11111)、i = 0、j = 4
出力:N = 31(11111)
出典:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/insert-into-bits-lcci
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2つの問題解決のアイデア
この質問ではビット操作を調べます。具体的な手順は次のとおりです。
(1)パラメータNのi番目の位置をj番目の位置に設定します。
(2)パラメータMをiだけ左に移動します。
(3)結果はMとNのOR演算です。
3つの問題解決コード
class Solution {
public:
int insertBits(int N, int M, int i, int j) {
int mask = ((1 << (j-i+1))-1) << i;
mask = ~mask; //取反
N &= mask;
M <<= i;
return M|N;
}
};