zoukankan      html  css  js  c++  java
  • 1018. Binary Prefix Divisible By 5

    问题:

    给定一个0,1组成的数组,前 i 个元素组成二进制数,若该二进制数能被5整除,返回true,否则返回false

    求出这个数组前 i 个元素(i=0~size()-1)的结果数组。

    Example 1:
    Input: [0,1,1]
    Output: [true,false,false]
    Explanation: 
    The input numbers in binary are 0, 01, 011; which are 0, 1, and 3 in base-10.  Only the first number is divisible by 5, so answer[0] is true.
    
    Example 2:
    Input: [1,1,1]
    Output: [false,false,false]
    
    Example 3:
    Input: [0,1,1,1,1,1]
    Output: [true,false,false,false,true,false]
    
    Example 4:
    Input: [1,1,1,0,1]
    Output: [false,false,false,false,false]
     
    Note:
    1 <= A.length <= 30000
    A[i] is 0 or 1
    

      

    解法:

    遍历数组,

    cur=cur*2+A[i]

    这个cur会留用到下一次循环中,

    如果cur能被5整除,(cur能被5整除->cur*2仍然能被5整除)

    那么下一次的cur是否能被5整除,只取决于A[i]

    且A[i]%5的余数=下一次的cur%5的余数。

    如果cur被5除余cur%5,

    那么下一次cur%5的余数=(cur*2+A[i])%5 = (cur*2%5 + A[i]%5) %5

    =  (cur%5*2 + A[i]%5) %5

    因此,每次cur可只保留%5的余数,到下一次循环中参与计算。

     1 class Solution {
     2 public:
     3     vector<bool> prefixesDivBy5(vector<int>& A) {
     4         int cur=0;
     5         vector<bool> res;
     6         for(int a:A){
     7             cur=(cur*2+a)%5;
     8             if(!(cur%5)) res.push_back(true);
     9             else res.push_back(false);
    10         }
    11         return res;
    12     }
    13 };
  • 相关阅读:
    年报统计系统—基本信息模块的目标文档
    用户分析
    第一周第三天
    第一周第二天
    第一周第一天
    学习进度条第三周
    学习进度表第二周
    四则运算2
    构建之法阅读笔记 01
    软件工程概论学习进度表第一周
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13113646.html
Copyright © 2011-2022 走看看