1.二进制中1的个数:
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
class Solution {
public:
int hammingWeight(uint32_t n) {
int count=0;
for(int i=0;i<32;++i){
if((n>>i)&1==1)
++count;
}
return count;
}
};
2.青蛙跳台阶问题:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
class Solution {
public:
int numWays(int n) {
if(n==0 || n==1)
return 1;
int a=1,b=1,c=0;
for(int i=2;i<=n;++i){
c=(a+b)%1000000007;
a=b;
b=c;
}
return c;
}
};
3.只出现一次的数字1:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int val=0;
for(int i=0;i<nums.size();++i)
val ^= nums[i];
return val;
}
};
4.只出现一次的数字2:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int bitarray[32]={0};
//统计n个数中32个位中合计1的个数
for(auto e: nums){
for(int i=0;i<32;++i){
if((e>>i)&1 == 1)
++bitarray[i];
}
}
//1的个数为 3m 或者 (3m+1)
int val=0;
for(int i=0;i<32;++i){
if(bitarray[i]%3 == 1)
val |= (1<<i);
}
return val;
}
};