338. Counting Bits -Medium
来源:互联网 发布:交换机端口隔离作用 编辑:程序博客网 时间:2024/06/05 17:28
Question
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.
给出一个非负整数num,对[0, num]范围内的数分别计算它们的二进制数中1的个数,用数组形式返回。
Example
For num = 5 you should return [0,1,1,2,1,2].
Solution
动态规划解。其实这是道找规律的题目,我们首先列出0-15的数对应的二进制中1的个数
数字 二进制中1的个数 递推关系式 0 0 dp[0] = 0 1 1 dp[1] = dp[1-1] + 1 2 1 dp[2] = dp[2-2] + 1 3 2 dp[3] = dp[3-2] + 1 4 1 dp[4] = dp[4-4] + 1 5 2 dp[5] = dp[5-4] + 1 6 2 dp[6] = dp[6-4] + 1 7 3 dp[7] = dp[7-4] + 1 8 1 dp[8] = dp[8-8] + 1 9 2 dp[9] = dp[9-8] + 1 10 2 dp[10] = dp[10-8] + 1 11 3 dp[11] = dp[11-8] + 1 12 2 dp[12] = dp[12-8] + 1 13 3 dp[13] = dp[13-8] + 1 14 3 dp[14] = dp[14-8] + 1 15 4 dp[15] = dp[15-8] + 1综上,递推关系式为 dp[n] = dp[n - offset] + 1 (这个规律还真不怎么好找),而offset的更新规律为,每当 offset * 2等于n时,offset就需要更新,即乘以2.
class Solution(object): def countBits(self, num): """ :type num: int :rtype: List[int] """ # 0-num有num + 1个数 dp = [0] * (num + 1) offset = 1 for n in range(1, num + 1): # 根据规律,只要index = 2 * offset,offset需要乘以2 if offset * 2 == n: offset *= 2 # dp[index] = dp[index - offset] + 1 dp[n] = dp[n - offset] + 1 return dp
0 0
- 338. Counting Bits #Medium
- 338. Counting Bits -Medium
- 338. Counting Bits-medium
- 338. Counting Bits [medium] (Python)
- 338. Counting Bits 难度:medium
- LeetCode 338. Counting Bits (Medium)
- 338.LeetCode Counting Bits(medium)[二进制位处理]
- Leetcode 338. Counting Bits (Medium) (cpp)
- LeetCode解题报告 338. Counting Bits [medium]
- 【leetcode】【Medium】【338. Counting Bits】【规律】
- [Medium] Counting Bits
- [Medium]Counting Bits
- Medium 338题 Counting Bits
- leetcode338:Counting Bits(medium)
- Leetcode #338 - Counting bits - Medium
- Leet Code OJ 338. Counting Bits [Difficulty: Medium]
- 动态规划——338. Counting Bits[Medium]
- Counting Bits——Difficulty:Medium
- Opencv历史发展和vs开发平台
- 结合hokuyo的UST-10LX激光雷达在turtlebot上建图
- 单独使用jdbc编程问题
- leetcode 56. Merge Intervals
- 机房问题
- 338. Counting Bits -Medium
- 观察者模式
- SSM框架整合
- android UiAutomator在清除文本时遇到中文的解决办法
- webpack基础入门
- CCF201412-4 最优灌溉(80分)
- 假期训练——The Dole Queue UVA - 133 模拟
- Yii使用find findAll查找出指定字段的实现方法
- SB集成Redis学习笔记之实际应用场景-java干货