1. 程式人生 > 其它 >力扣 leetcode 1018. 可被 5 整除的二進位制字首 (python)

力扣 leetcode 1018. 可被 5 整除的二進位制字首 (python)

技術標籤: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:

執行效率提高了不少
在這裡插入圖片描述