Lintcode181 將整數A轉換為B

2021-08-28 15:13:18 字數 679 閱讀 8066

描述

如果要將整數a轉換為b,需要改變多少個bit位?

both n and m are 32-bit integers.

您在真實的面試中是否遇到過這個題?

樣例如把31轉換為14,需要改變2個bit位。

(31)10=(11111)2

(14)10=(01110)2

兩個數異或之後得到數t(例如樣例中t為10001)

問題轉換為判斷t中有多少個1

可以通過移位運算來判斷,方法如下:

設定乙個flag為1,判斷flag&t是否為1,為1則認為當前位是1,然後將t右移1位並判斷t是否為0,不為0則繼續while迴圈

可以發現,如果是右移t,則當t是負數的時候,左邊為補符號位,即補1,導致了while迴圈無法終止。回顧一下移位運算子

移位運算子有雙目移位運算子:<

我們不右移t而是左移flag,並由flag是否為0來終止while迴圈。

//提交通過

class solution

flag<<=1;

}return count;}};

181 將整數A轉換為B

原題 both n and m are 32 bit integers.您在真實的面試中是否遇到過這個題?是 31 10 11111 2 14 10 01110 2 標籤 cracking the coding interview 位元位操作 思路 按位異或,統計結果數中有多少個bit位是1,結果中...

lintcode 將整數A轉換為B

利用位運算 class solution return count 總耗時 2834 ms 利用位運算 與減法 class solution return count 總耗時 2366 ms 取一位判斷一位 class solution return count 總耗時 2103 ms 下面是自己寫...

LintCode解題筆記 將整數A轉換為B

如果要將整數a轉換為b,需要改變多少個bit位?樣例 如把31轉換為14,需要改變2個bit位。31 10 11111 2 14 10 01110 2 思路1 從低位到高位依次比較a,b對應位置的二進位制值,如何才能依次比較?a,b又不是一二進位制的形式存成字串。我們需要有一種方法,能每次僅取到特定...