leetcode-476. 數字的補數
阿新 • • 發佈:2021-11-13
題目
解法
進位制轉換
進位制轉換有一個固定的模板,我是用的比較直觀的一種方式
class Solution { /** * @param Integer $num * @return Integer */ function findComplement($num) { $ret = 0; $mul = 1; while ($num > 0) { $mod = $num % 2; $num = floor($num / 2); $ret += abs($mod - 1) * $mul; $mul *= 2; } return $ret; } }
位運算與進位制轉換
還有一種方式是進行位移操作, $num >> 1;
判斷最小位是否是1可以使用 $num & 1
表示
class Solution { /** * @param Integer $num * @return Integer */ function findComplement($num) { $ret = 0; $mul = 1; while ($num > 0) { if (($num & 1) != 1) { $ret += $mul; } $num >>= 1; $mul *= 2; } return $ret; } }
位運算
官方題解的方案是:
- 查到最高的那一位
- 然後算出來 mask
- 將數字與 mask 進行異或
程式碼就不貼出來了, 可以到官方題解檢視
參考
本文來自部落格園,作者:吳丹陽-cn,轉載請註明原文連結:https://www.cnblogs.com/wudanyang/p/15548266.html