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

2021-10-04 08:32:02 字數 1397 閱讀 4746

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

在討論區學習來的方法,太妙了~

方法一n - 1 會將 n 最右邊的 1 及其右邊的 0 全部取反,再用 n 與它進行按位與運算,那麼就將原本最右邊的 1 及其右邊的 0 全部置為了 0,其餘位置不受影響。n 有多少個1 ,就會進行多少次這樣的操作。因為負數用補碼表示,所以也可行。

function numberof1(n)

return count;

}

方法二

將 n 與 1 進行按位與比較,即可以得到最右邊位是否為 1 。每次將 n 右移,直至 n 為 0 。

注意是無符號右移。有符號右移會在左邊(符號位的右邊)新增符號位的值,無符號右移則會將數值的所有位向右移動,在左邊以 0 來填充。如果寫成了有符號右移(>>)那麼左邊一直新增了 1 ,就會無限迴圈下去。

此方法和方法三比方法一不足的地方是,每乙個位都要進行比較。

function numberof1(n)

n = n >>> 1;

}return count;

}

方法三

將 n 與標誌位(開始為1)進行按位與比較,每次將標誌位左移,直至標誌位為 0 。

function numberof1(n)

flag = flag << 1;

}return count;

}

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。保證base和exponent不同時為0。

方法一:呼叫系統函式

function power(base, exponent)
方法二:迴圈

考慮輸入型別、考慮 base 為 0 ,exponent 為 0 ,考慮 exponent < 0 ,exponent > 0

function power(base, exponent)

return result;

}

方法三:快速求冪演算法

向別人學習的。

方法二需要乙個乙個乘,比如 3 ^ 10,方法二需要乘 10 次。但是如果我們將它拆分為 3 ^ (8+2),即 3 ^ 8 * 3 ^ 2,只需要 2 次。我們將 10 的二進位制寫出來:1010,為 1 的位即為要乘的數。因此,我們可以通過二進位制去找。

function power(base, exponent)

base *= base; //每移乙個位翻一倍

e = e >>> 1;

}return result;

}

11 劍指offer第十一題(python)

問題 輸入乙個整數,輸出該數二進位制表示中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...

JS《劍指offer》第十一題 二進位制中1的個數

題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。分析 計算機中正數就是原碼表示,負數用補碼表示,所以不需要我們自己把數字轉化為二進位制。題目中說到負數用補碼表示,實際上計算機中的負數就是用補碼表示的。所以,輸入的數字我們也可以直接當成二進位制就行。1 可能引起死迴圈的解法...

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

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