美文网首页
《剑指Offer》 No.10 二进制中1的个数

《剑指Offer》 No.10 二进制中1的个数

作者: 苏村的南哥 | 来源:发表于2018-12-13 11:13 被阅读2次

    解法一  运行时间:29m  占用内存:629k

    /*
     * 输入一个整数,获取二进制中包含1的个数
     **/
    public static int  numberOf1(int n) {
            String s =Integer.toBinaryString(n);
            char[] c =s.toCharArray();
            int j =0;
            for(int i=0;i<c.length;i++){
                    if(c[i]=='1'){
                        j++;
                    }
            }
            return j;
         }
    }
    
    源码分析:
    public static String toBinaryString(int i) {
            return toUnsignedString0(i, 1);
     }
      /**
         * Convert the integer to an unsigned number.
         */
    
        private static String toUnsignedString0(int val, int shift) {
            // assert shift > 0 && shift <=5 : "Illegal shift value";
            int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);
            int chars = Math.max(((mag + (shift - 1)) / shift), 1);
            char[] buf = new char[chars];
    
            formatUnsignedInt(val, shift, buf, 0, chars);
    
            // Use special constructor which takes over "buf".
            return new String(buf, true);
        }
    
    

    代码分析:以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。

    • 先把整数转换成二进制字符串

    • 把字符串转换成字符数组

    • 遍历该数组,判断每位是否为1,为1 计数加1。

    • 遍历完成返回1的个数

    相关文章

      网友评论

          本文标题:《剑指Offer》 No.10 二进制中1的个数

          本文链接:https://www.haomeiwen.com/subject/rchphqtx.html