有人能解釋我爲什麼這種方法可行,我已經通過它做什麼工作,但爲什麼這項工作。有二進制數字的模式嗎?例如像在I = 3,爲什麼它做RES [1] + 1得到2,如何RES [3 >> 1] +(3 & 1)幫助數在3二進制數一的數量?爪哇 - 位操作(算上個1號)
代碼應該做什麼:它的工作原理,所以不用擔心。它應該返回一個列表,其中包含每個數字的二進制表示中的數字,直到num + 1。並且num始終> = 0。所以對於num = 5,您將得到[0,1,1,2,1,2],其中最後一個索引表示二進制表示中的1的數目爲5,並且第一個指數是那些在二進制代表數0
代碼:
public int[] countBits(int num) {
int[] res = new int[num+1];
for (int i = 0; i<num+1; i++){
res[i] = res[i >> 1] + (i & 1);
}
return res;
}
這是一部分,我不能換我的頭周圍:
res[i] = res[i >> 1] + (i & 1);
編輯 - 這不是家庭主婦k,所以請充分解釋您的答案。這是爲了幫助採訪。
在我們試圖找出它「起作用」的原因之前,你能解釋一下它應該做什麼嗎?即'countBits(10)'(例如)應該是什麼結果? – ajb
*有沒有二進制數字有的模式?* **是!** –
@ajb啊對不起,我應該提到的是,返回一個包含數字0到num數目的列表。所以在你的情況下,0到10包括在內。 – Theo