輸入乙個整數,輸出該數32位二進位制表示中1的個數。其中負數用補碼表示。
總結: 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1(如果最右邊的1後面還有0的話)。其餘所有位將不會受到影響。
舉個例子:乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0,它後面的兩位0變成了1,而前面的1保持不變,因此得到的結果是1011.我們發現減1的結果是把最右邊的乙個1開始的所有位都取反了。這個時候如果我們再把原來的整數和減去1之後的結果做與運算,從原來整數最右邊乙個1那一位開始所有位都會變成0。如1100&1011=1000.也就是說,把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以進行多少次這樣的操作。
public class solution
return count;
}}
劍指offer之二叉樹總結
會用遞迴了二叉樹的問題就會一大半了.一.用遞迴求解 對於要利用二叉樹的規律的題都可以利用它的左節點也是其左子樹的根節點的特性來遞迴求解。可以說那種引數有根節點的題一般都可以用遞迴來解決,來看看 劍指offer 中可用遞迴解決的題 1.根據前序遍歷的性質,第乙個元素必然就是root,那麼下面的工作就是...
劍指offer第二題
最直觀的做法是從頭往後開始掃瞄,但是這樣複雜度為o n 2 o n 的做法是從後往前開始複製和替換。先求出替換後的字串大小,然後用兩個指標 index 從後往前複製,如果遇上空格,直接替換為 20 public class solution int oldindex str.length 1 int...
劍指offer第二題
請實現乙個函式,將乙個字串中的空格替換成 20 例如,當字串為 則經過替換之後的字串為 分析 考場陣列的操作,主要是從頭到尾的操作要消耗o n 複雜度,如果完成插值,則為o n2 所以要從尾部倒過來轉移。注意 本題有兩點要考慮。其一,注意錯誤的返回值為return,而不是return false。其...