文章目录

  • 1. 题目信息
  • 2. 解题
    • 拓展:求一个数n的2进制有多少个1?
    • LeetCode 338

1. 题目信息

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。

示例 1:输入: 1
输出: true
解释: 20 = 1
示例 2:输入: 16
输出: true
解释: 24 = 16
示例 3:输入: 218
输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/power-of-two
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 2的整数次幂的2进制数中只有1个1
  • n经过 运算 n&(n-1) 得到的数的二进制1的个数减少1个

class Solution {public:bool isPowerOfTwo(int n) {if(n <= 0)return false;return (n&(n-1)) == 0;//错误写法 n&(n-1) == 0}
};

拓展:求一个数n的2进制有多少个1?

int count = 0, num = 8;
while(num)
{count++;num = num&(num-1);
}
std::cout << count << std::endl;

LeetCode 338

给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

class Solution {public:vector<int> countBits(int num) {int count, temp;vector<int> ans;for(int i = 0; i <= num; ++i){count = 0;temp = i;while(temp){temp &= (temp-1);++count;}ans.push_back(count);}return ans;}
};

对338题还可以用动态规划

  • dp[0] = 0
奇数 偶数
1-‘01’-dp[1]=1 2-‘10’-dp[2]=1
3-‘11’-dp[3]=2 4-‘100’-dp[4]=1
5-‘101’-dp[5]=2 6-‘110’-dp[6]=2
7-‘111’-dp[7]=3 8-‘1000’-dp[8]=1

n为奇数,dp[n]=dp[n−1]+1n为奇数,dp[n] = dp[n-1]+1n为奇数,dp[n]=dp[n−1]+1,比前面的多1,好理解
n为偶数,dp[n]=dp[n/2]n为偶数,dp[n]=dp[n/2]n为偶数,dp[n]=dp[n/2],2的倍数,只需要移动位数就可以,1个数不变

class Solution {public:vector<int> countBits(int num) {vector<int> ans(num+1);ans[0] = 0;for(int i = 0; i <= num; ++i){if(i % 2 == 1){ans[i] = ans[i-1] + 1;}else{ans[i] = ans[i/2];}}return ans;}
};

LeetCode 231. 2的幂 LeetCode 338. 比特位计数(2进制1的个数)相关推荐

  1. Leetcode 338.比特位计数

    Time: 20190904 Type: Medium 题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. ...

  2. leetcode 338. 比特位计数

    给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...

  3. 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)

    文章目录 题目描述 思路 & 代码 无注释二刷 题目描述 难点在于 O(n) 思路 & 代码 理解题意,分析出 O(n) 复杂度应该是要用到之前的值来得到当前值--动态规划 核心结论: ...

  4. leetcode力扣338. 比特位计数

    给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...

  5. leetcode 338 比特位计数

    如果一个数i%2=1,即为奇数,即二进制中的最低位为1.我们将这个过程循环直至i为0,每一次i%2=1我们将该数的'1'数加一. 上面的方法不能做到复杂度O(n)完成所有数的的遍历.我们换成动态规划. ...

  6. LeetCode 338. 比特位计数(动态规划)

    题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2 ...

  7. 力扣 338. 比特位计数

    题目 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案. 示例 输入:n = 2 输 ...

  8. 338 比特位计数(动态规划-递推)

    1. 问题描述: 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] ...

  9. 338. 比特位计数

    题目描述:给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i,计算其二进制数中的 1 的数目并将它们作为数组返回. 解题思路:以2的幂次方为循环,如果当前数大于等于2的i次方 ...

最新文章

  1. swiftswift3.0自己封装的快速构建页面的方法
  2. 一口气说出四种幂等性解决方案,面试官露出了姨母笑~
  3. 以下哪一个不属于python语言的特点-以下不属于python语言特点的是( )_学小易找答案...
  4. 汇编语言基础知识摘要(《汇编语言》王爽)第 3 / 17 章
  5. 基础知识的学习,来自十年程序员的经验分享
  6. pytesseract:opencv预处理图片
  7. Spring与网关的集成
  8. ActiveX控件打包成Cab置于网页中自动下载安装
  9. substring 在C#,Javascript,SQL 中index开始值
  10. SQL 子查询怎么优化?写的很深!
  11. Matlab运算之 norm,cross,makehgtform,asin(acos)
  12. 盘点国内外私募基金业绩报酬计提方式
  13. 2019蓝桥:2019拆分为平方和问题
  14. 使用dea-toolbox进行数据包络分析
  15. 明源云客微信抢房技巧_明源演示 - 微信抢房_软件抢房_网上选房_手机抢房_代抢房 - 爱抢房...
  16. 小程序ibeacon三点定位
  17. Cibersort 算法 分析肿瘤样本免疫细胞组分
  18. Mysql 索引模型 B+ 树详解
  19. 【Linux】ab命令实现网站性能压力测试
  20. 北京外企 外服控股:人服国企借道资产重组上市

热门文章

  1. FreeRTOS系列第19篇---FreeRTOS信号量
  2. html间数据传送,Express框架与html之间如何进行数据传递(示例代码)
  3. 启动mq命令 linux,RocketMQ:Linux下启动server和broker的命令
  4. request获取各种路径总结、页面跳转总结。
  5. caffe各种依赖包配置
  6. 汇编中调用函数(类比c
  7. ABP框架详解(八)动态ApiController的生成和访问机制
  8. IEnumerable和IQueryable的区别
  9. Highcharts 本地导出图片 Java
  10. 聊聊身边的嵌入式,英语学习利器点读笔