可被5整除的二進制


此博客鏈接:

可被5整除的二進制

題目鏈接:https://leetcode-cn.com/problems/binary-prefix-divisible-by-5/

題目

給定由若干 0 和 1 組成的數組 A。我們定義 N_i:從 A[0] 到 A[i] 的第 i 個子數組被解釋為一個二進制數(從最高有效位到最低有效位)。

返回布爾值列表 answer,只有當 N_i 可以被 5 整除時,答案 answer[i] 為 true,否則為 false。

 

示例 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]
示例 4:

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

題解

前言:這題我沒有看出來是簡單題,可能因為我進制不會轉換。

思路:我認為第一步應該先把二進制能夠取出來,怎樣從數組中能按順序取二進制數;

                      其次把二進制數轉成十進制數;

                      最后判斷轉換后的十進制數是否能夠被5整除。

錯誤嘗試

我傻了,既然是字符串,轉換成整數時,肯定會超出int的長度。

class Solution {
    public List<Boolean> prefixesDivBy5(int[] A) {
        String str="";
        int ten=0;
       List<Boolean>result=new ArrayList();
        for(int i=0;i<A.length;i++)
        {
            str+=String.valueOf(A[i]);
            ten=Integer.parseInt(str,2);
            if(ten%5==0)
                result.add(true);
            else
                result.add(false);
        }
        return result;
    }
}

  

 

 

代碼

由於二進制轉換成十進制會越界,那么不能利用java自帶的二進制換是十進制的函數,這里利用二進制轉十進制的公式,二進制數的每一位*2轉換成響應的十進制,為了防止數字溢出,在每次轉成十進制后都對5取余,而不是總后的結果對5取余,這里我不知道怎么證明,但是對於這種判斷能不能整除的數,在每次求數時就對某個數取余和最后對某個數取余結果是一樣的。

class Solution {
    public List<Boolean> prefixesDivBy5(int[] A) {
       
        Integer ten=0;
       List<Boolean>result=new ArrayList();
        for(int i=0;i<A.length;i++)
        {
            ten=(ten*2+A[i])%5;
            if(ten==0)
                result.add(true);
            else
                result.add(false);
        }
        return result;
    }
}

 

結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM