• 可被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;
        }
    }

    结果

  • 相关阅读:
    linux命令-定时任务at
    linux网络监控_网速测试
    Linux磁盘分区扩容
    Ubuntu配置SSH服务
    Ubuntu用户管理
    Ubuntu安装lrzsz
    Ubuntu系统配置apt-get软件更新源
    Ubuntu网络配置IP和DNS等,适用于14.04,16.04,17.10和18.04
    Ubuntu系统安装,适用于14.04,16.04和17.10
    使用nginx反向代理处理前后端跨域访问
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14278315.html
Copyright © 2020-2023  润新知