力扣 leetcode 1018. 可被 5 整除的二進位制字首 (python)
阿新 • • 發佈:2021-01-19
技術標籤:leetcodepython演算法pythonleetcode資料結構
Topic:
給定由若干 0 和 1 組成的陣列 A。我們定義 N_i:從 A[0] 到 A[i] 的第 i 個子陣列被解釋為一個二進位制數(從最高有效位到最低有效位)。
返回布林值列表 answer,只有當 N_i 可以被 5 整除時,答案 answer[i] 為 true,否則為 false。
Example_1:
輸入:[0,1,1]
輸出:[true,false,false]
解釋:
輸入數字為 0, 01, 011;也就是十進位制中的 0, 1, 3 。只有第一個數可以被 5 整除,因此 answer[0] 為真。
Example_2:
輸入:[1,1,1]
輸出:[false,false,false]
Example_3:
輸入:[0,1,1,1,1,1]
輸出:[true,false,false,false,true,false]
Example_4:
輸入:[1,1,1,0,1]
輸出:[false,false,false,false,false]
Solution_1:
將二進位制數按照位數轉換為10進位制數進行取餘判斷
Code_1:
class Solution:
def prefixesDivBy5(self, A: List[int]) -> List[bool]:
a = 0
res = []
for i in range(len(A)):
a = a * 2 + A[i]
if a % 5 == 0:
res.append(True)
else:
res.append(False)
return res
Result_1:
Solution_2:
對a進行模5取餘
a = a % 5
保證a的值永遠控制在0~4
對演算法進行優化
減小空間使用加速執行速度
Result_2:
執行效率提高了不少