Leetcode之PHP版題目解析(231. Power of Two)
2 0 1 9 - 3 - 2 0 星 期 三 開 始 吧
上 一 題 鏈 接 https://laravelacademy.org/post/19519.html
題 目 描 述
給 定 一 個 數 , 判 斷 他 是 否 是 2 的 冪 次 方 數 .
題 目 分 析
常 規 解 法 就 是 遞 歸 , 因 為 如 果 是 的 話 那 麼 這 個 數 肯 定 能 被 2 整 除 , 他 的 1 / 2 也 能 被 2 整 除 . . .
具 體 實 現
/** * @param Integer $n * @return Boolean */ function isPowerOfTwo($n) { if($n==1){ return true; } if($n>=2 && $n%2==0) { return $this->isPowerOfTwo($n /2); } }
其 他 解 法
對 於 這 樣 的 題 我 們 還 可 以 用 與 ( & ) 運 算 .
2的冪次方數轉二進位制減1 21001 4100011 810000111 16100000011111 ............
符 合 2 的 冪 次 方 的 數 他 的 二 進 制 表 示 最 低 位 都 是 1 , 有 且 只 有 一 個 , 如 果 我 們 減 去 1 的 話 , 那 麼 最 低 位 就 是 0 , 之 後 位 上 的 數 都 是 1 , 然 後 我 們 吧 減 去 1 的 數 和 2 的 冪 次 方 數 進 行 相 與 計 算 , 那 麼 最 終 的 結 果 就 是 0
實 現 代 碼
/** * @param Integer $n * @return Boolean */ function isPowerOfTwo($n) { if($n<1) { return false; } return ($n & $n-1)===0; }