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 };
  • 相关阅读:
    div定位左右居中
    highcharts绘制3D倾斜的饼图
    Echarts 图表不能渲染问题整理
    RK:系统手势监听
    RK:网络共存、Shell脚本
    泛型
    ArrayList类
    Linux(centos7)安装ClickHouse
    centos安装宝塔命令
    centos下修改hosts文件以及生效命令
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/13113646.html
Copyright © 2011-2022 走看看