プログラマーインタビューゴールデンコード-インタビュー質問05.01。挿入

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;
    }
};

4つの問題解決の結果

おすすめ

転載: blog.csdn.net/qq_39661206/article/details/108124178