Leetcode——338. 比特位计数
题目描述:题目链接
对于求解一个十进制数转化为二进制时里面1的个数,可以先看一下概况:
十进制数 二进制数 1的个数
1 1 1
2 10 1
3 11 2
4 100 1
5 101 2
6 110 2
7 111 3
看上面的一系列数字的二进制中1的个数:
对于一个偶数 n ;其二进制组成最低位为0,所以其1的位数就是除了最低位之外前面那一部分中1的位数,即是i/2中1的位数。
对于一个奇数n,其末位的数一定是1,那么对于n-1,一定是个偶数,并且只需要将n-1的末位0改成1就可以变成 n,因为 a[n] = a[n - 1] +1;
则可以得出上面两个递推关系式。
按照动态规划的思路:
1:问题归纳:用数组a[ i ] 表示 i 的二进制中1的个数。
2:递推关系式 a[n] = a[n/2] n为偶数
a[n] = a[n-1] +1 n为奇数
3:初始化:a[0] = 0
下面给出代码:
class Solution {
public int[] countBits(int num) {
int[] res = new int[num+1];
res[0] = 0;
//先将所有的num转化为偶数处理,因为没有都是处理两个数
int n = num%2 !=0 ? num-1:num;
for(int i = 1; i <= n;i++){
res[i] = res[i-1]+1;
i++;
res[i] = res[i/2];
}
//最后有个奇数没有处理
if(num % 2 != 0){
res[num] = res[n] + 1;
}
return res;
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法2:
对于一个数n,求解其二进制中1的个数可以利用位运算。
给出递推关系式:a[i] = a[i&i-1]+1; 这个关系式可以有上面的实例归纳出来。
class Solution {
public int[] countBits(int num) {
int[] a = new int[num+1];
for(int i =1;i <= num;i++){
a[i] = a[i&i-1]+1;
}
return a;
}
}
Leetcode——338. 比特位计数的更多相关文章
- LeetCode 338. 比特位计数
338. 比特位计数 题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 示例 1: 输入: 2 输出 ...
- Java实现 LeetCode 338 比特位计数
338. 比特位计数 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1 ...
- Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits)
Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits) 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数 ...
- leetcode TOP100 比特位计数
338. 比特位计数 题目描述: `给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: ...
- 338.比特位计数( Counting Bits)leetcode
附上:题目地址:https://leetcode-cn.com/problems/counting-bits/submissions/ 1:题目: 给定一个非负整数 num.对于 0 ≤ i ≤ nu ...
- Leetcode题目338:比特位计数(中等)
题目描述: 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 ...
- [Leetcode] 第338题 比特位计数
一.题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 ...
- 338. Counting Bits_比特位计数_简单动态规划
https://leetcode.com/problems/counting-bits/ 这是初步了解动态规划后做的第一道题,体验还不错... 看完题目要求后,写出前10个数的二进制数,发现了以下规律 ...
- 【Leetcode】338. Bit位计数
每次刷leetcode都有一种发现新大陆的感觉. 题目链接:https://leetcode-cn.com/problems/counting-bits/description/ 给定一个非负整数 n ...
随机推荐
- JS 获取css transform中的值
可以参考这位博主的文章https://www.cnblogs.com/zhenwoo/p/4993780.html 不想看直接想看怎么解决的看这: var translates= document.d ...
- Spring boot初入门
1. Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1. @Configuration 和 @Bean Spring的Java配置方式是 ...
- 为什么你用不好Numpy的random函数?
为什么你用不好Numpy的random函数? 在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学 ...
- 葡萄城报表介绍:矩表(Tablix)
一.矩表(Tablix)定义 Tablix 即表(Table)+矩阵(Matrix)+列表(List),它是报表中展示数据的一种工具,由表.矩阵.列表这三个具有相似性的报表项组成. 二.矩表(Tabl ...
- Android studio button 按钮 四种绑定事件的方法
package com.geli_2.sujie.sujiegeili2testbutton; import android.os.Bundle; import android.support.v7. ...
- linux设置永久环境变量
vi /etc/profile 文件最后输入export PATH=$PATH:/usr/abc/def/ 保存 输入source /etc/profile刷新刚刚修改过的环境变量文件
- PHP检测数组中的每个值是否含有特殊字符
本文出至:新太潮流网络博客 /** * [TestArray 检测数组是一维还是二维] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB ...
- Oracle EBS OPM 生产批创建事务处理
--生产批创建事物处理 --created by jenrry DECLARE p_mmti_rec mtl_transactions_interface%ROWTYPE; p_mmli_tbl gm ...
- 转:.NET基础篇——反射的奥妙
反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息.使用反射可以看到一个程序集内部的接口.类.方法.字段.属性.特性等等信息.在System.Reflectio ...
- python虚拟环境 -- virtualenv , virtualenvwrapper
virtualenv -- python虚拟沙盒 有人说:virtualenv.fabric 和 pip 是 pythoneer 的三大神器. 一.安装 pip install virtualenv ...