leetcode--1018.可被5整除的二進制前綴

題目描述:
在這裏插入圖片描述
示例1

輸入:[0,1,1]
輸出:[true,false,false]
解釋:
輸入數字爲 0, 01, 011;也就是十進制中的 0, 1, 3 。只有第一個數可以被 5 整除,因此 answer[0] 爲真。

示例2

輸入:[1,1,1]
輸出:[false,false,false]

示例3

輸入:[0,1,1,1,1,1]
輸出:[true,false,false,false,true,false]

思路:

當前子數組的二進制值就是前一個二進制值*2+自身的值。
但是不能一直這樣加下去進行計算比較,因爲每次乘2後加上自身的值會使得這個數字呈指數增長,當測試數組長一點時就會值溢出。所以每次計算出自身的值後就將自身的值對5取餘再進行比較,如果對5取餘後的值等於0,那說明當前子串的二進制值是5的倍數,鏈表添加true,否則添加false.

java代碼

class Solution {
    public List<Boolean> prefixesDivBy5(int[] A) {
        List<Boolean> list = new ArrayList<Boolean>();
        int flag=0;
        for(int i=0;i<A.length;i++){
            flag=flag*2+A[i];
           flag=flag%5;
           if(flag==0){
               list.add(true);
           }else{
               list.add(false);
           }
        }
        return list;
        }
    }
發佈了88 篇原創文章 · 獲贊 7 · 訪問量 4840
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章