前言
今天去了一家有故事的猫咖,里面的猫猫狗狗来自我们本地的一个流浪猫狗收容所,在他们的留言墙上我看到了那个慈祥的大姨,她是这些猫猫狗狗的妈妈,她心中又有什么样的信仰和信念支撑和驱动着她去不知劳累的干这些事情呢。
题目

解法1
class Solution {
public:
int sumIndicesWithKSetBits(vector<int>& nums, int k) {
int sum=0;
int is,iy;
for(int i=0;i<nums.size();i++){
int cnt=0;
is=i;
while(is>0){
iy=is%2;
is=is/2;
if(iy==1){
cnt++;
}
}
if(cnt==k){
sum+=nums[i];
}
}
return sum;
}
};
这是我本人的思路,通过十进制转二进制的方法,通过每一次将索引除以二,看余数是否为1,是则让cnt++,否则不变,然后继续用除以二得到的商重复以上操作,直到商等于0,然后比较cnt和k,如果相等则符合条件,加到sum里面,最终遍历完每一个索引以后,返回sum的值。
解法2
class Solution {
public:
int sumIndicesWithKSetBits(vector<int>& nums, int k) {
int sum=0;
int is,iy;
for(int i=0;i<nums.size();i++){
int cnt=0;
is=i;
while(is){
if(is&1){
cnt++;
}
is = is>>1;
}
if(cnt==k){
sum+=nums[i];
}
}
return sum;
}
};
这是老师的思路,结合位与运算和右移运算,减少代码长度,更加简便。
位于运算即相同为1,不同为0,利用它可以判断最后一位是否为1;
右移运算即让索引对应的二进制数向右移动一位,左边补0,比如111->011.
反思
1.考察知识点:二进制到十进制的转换,位运算
2.踩的坑:对二进制转十进制不熟悉
3.可以优化的地方:利用位运算优化代码
1373

被折叠的 条评论
为什么被折叠?



