11 劍指offer第十一題(python)

2021-09-25 06:26:59 字數 811 閱讀 8122

問題:

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

**:

# -*- coding:utf-8 -*-

class solution:

def numberof1(self, n):

# write code here

count=0

if n<0:

n=n&0xffffffff

while n :

count+=1

n=n&(n-1)

return count

占用記憶體:5624k

1. 原碼,反碼和補碼:

正數:正數的原碼,反碼和補碼相同,都是將正數轉換為二進位制, 正數的符號位為0

如: 1: 0000 0001

3: 0000 0011

負數: 首先將負數的符號位置為1,然後將其轉換為二進位制,即獲得負數的原碼;

符號位不變,其餘位取反,即為負數的反碼

在補碼的基礎上+1,即負數的補碼

計算機字長為32位,負數&0xffffffff即可得到補碼,如:

input :bin(-1&0xffffffff)

output:0b11111111111111111111111111111110

2. 關於 n&(n-1)

乙個數字n,然後與 n-1 進行按位與,除了最靠右的 1 置零後,其他的高位的 1 沒有發生變化,每執行一次,就可以知道有乙個 1 .

如:6&5(十進位制)  《==》0110&0101 =0100(二進位制)  = 4(十進位制)

《劍指offer》第十一 十二題(js)

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。在討論區學習來的方法,太妙了 方法一n 1 會將 n 最右邊的 1 及其右邊的 0 全部取反,再用 n 與它進行按位與運算,那麼就將原本最右邊的 1 及其右邊的 0 全部置為了 0,其餘位置不受影響。n 有多少個1 就會進行多少次這樣...

劍指offer第十一題 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。coding utf 8 classsolution defminnum...

劍指offer第十一題 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 2,2,2,0,1 輸出 ...