LeetCode 231. 2的幂 LeetCode 338. 比特位计数(2进制1的个数)
文章目錄
- 1. 題目信息
- 2. 解題
- 拓展:求一個(gè)數(shù)n的2進(jìn)制有多少個(gè)1?
- LeetCode 338
1. 題目信息
給定一個(gè)整數(shù),編寫(xiě)一個(gè)函數(shù)來(lái)判斷它是否是 2 的冪次方。
示例 1:輸入: 1 輸出: true 解釋: 20 = 1 示例 2:輸入: 16 輸出: true 解釋: 24 = 16 示例 3:輸入: 218 輸出: false來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/power-of-two
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
- 2的整數(shù)次冪的2進(jìn)制數(shù)中只有1個(gè)1
- n經(jīng)過(guò) 運(yùn)算 n&(n-1) 得到的數(shù)的二進(jìn)制1的個(gè)數(shù)減少1個(gè)
拓展:求一個(gè)數(shù)n的2進(jìn)制有多少個(gè)1?
int count = 0, num = 8; while(num) {count++;num = num&(num-1); } std::cout << count << std::endl;LeetCode 338
給定一個(gè)非負(fù)整數(shù) num。對(duì)于 0 ≤ i ≤ num 范圍中的每個(gè)數(shù)字 i ,計(jì)算其二進(jìn)制數(shù)中的 1 的數(shù)目并將它們作為數(shù)組返回。
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;} };對(duì)338題還可以用動(dòng)態(tài)規(guī)劃
- 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為奇數(shù),dp[n]=dp[n?1]+1n為奇數(shù),dp[n] = dp[n-1]+1n為奇數(shù),dp[n]=dp[n?1]+1,比前面的多1,好理解
n為偶數(shù),dp[n]=dp[n/2]n為偶數(shù),dp[n]=dp[n/2]n為偶數(shù),dp[n]=dp[n/2],2的倍數(shù),只需要移動(dòng)位數(shù)就可以,1個(gè)數(shù)不變
總結(jié)
以上是生活随笔為你收集整理的LeetCode 231. 2的幂 LeetCode 338. 比特位计数(2进制1的个数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 268. 缺失数字
- 下一篇: LeetCode 219. 存在重复元素