leetcode刷題(33) 338 位元位計數

2021-10-05 08:07:15 字數 1047 閱讀 3121

給定乙個非負整數 num。對於 0 ≤ i ≤ num 範圍中的每個數字 i ,計算其二進位制數中的 1 的數目並將它們作為陣列返回。

示例 1:

輸入: 2

輸出: [0,1,1]

示例 2:

輸入: 5

輸出: [0,1,1,2,1,2]

總的思路是:寫乙個方法統計乙個整數的二進位制中 「1」 的數目,然後統計 0 ≤ i ≤ num 範圍中的每個數字。

統計乙個整數的二進位制中 「1」 的數目有兩種方法:

利用 integer.tobinarystring(a) 得到整數 a 的二進位制字串形式,統計字串中字元 『1』 的數目。**如下:

public

intcount

(int a)

return length;

}

如果乙個整數不為 0,那麼這個整數至少有一位是 1。如果我們把這個整數減 1,那麼原來處在整數最右邊的 1 就會變為 0,且這個 1 後面的所有的 0 都會變成 1(如果最右邊的 1 後面還有 0 的話),而其餘的位不會受影響。如,1100 - 1 = 1011。我們發現減 1 的結果是把從最右邊的乙個 1 開始的所有位都取反了。這個時候再把原來的整數和減去 1 之後的結果做運算,則原來整數從最右邊的乙個 1 開始的所有位都會變成 0。如,1100 & 1011 = 1000。

也就是說,a & (a - 1) 的結果,就是把整數 a 最右邊乙個 1 變成 0。那麼乙個整數的二進位制有多少個 1,就可以進行多少次這樣的操作。**如下:

public

intcount

(int a)

return length;

}

class

solution

return res;

}public

intcount

(int a)

return length;

}}

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...

LeetCode刷題總結

123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...