題目描述:
示例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;
}
}