題目:

官網題目連結

根據題目敘述,會需要將輸入的整數 N 轉成二進位,並找出任意夾在兩個 1 中間的最大 0 總數。
例如輸入 529,轉成二進位是 1000010001,答案就是 4,而如果沒有任何 0 是夾在兩個 1 中間的,則會回傳 0。

  • N 是範圍 [1~2147483647] 的整數。

解法:

先把數字轉成字串再遍歷一次即可,這邊要注意的陷阱是容易疏忽最後一個 1 的判斷。
例如轉成二進位是 1001000 時,由於最後面並沒有結尾的 1 把三個 0 夾住,所以答案是 2 不是 3。
所以重點會在於何時將當前計算的最大值轉成合法的最大值。

  • 時間複雜度 O(N)
  • 空間複雜度 O(1)

PHP 程式碼: