新穎的解法,使得該題目運用到了二進制的位運算符。先了解一下位運算符!spa
此題便很好的發揮了位運算符&的特色,怎麼想呢?這樣:二進制數均是由0和1構成,當輸入的參數X不等於0時,咱們使用該參數X與(X-1)作&運算,運算結果以下圖,可見,因爲X與X-1的二進制變化是發生在X爲1最後一位,即X-1在此處之後的位置均發生了改變,&運算後發現比X最後面少了一個1,所以,此時,記錄一次,而後循環往復,直至X爲0,記錄的次數即爲X中1的個數。code
class Solution { public int NumberOf1(int n) { // write code here //設二進制初始時1的個數爲0個 int x = 0; while(n!=0) { x++; //&爲二進制取位符 n=n&(n-1); } return x; } }
哇,題目一開始以爲很煩人,但代碼就這麼點,真的很不甘心是嗎?哈哈。。blog