leetcode 22-03-20

今日份 LeetCode

  • 191. 位1的个数
  • 1281. 整数的各位积和之差
  • 704. 二分查找

191. 位1的个数

解题思路

1 进行按位与运算,等于 1res 加 1

代码

1
2
3
4
5
6
7
8
// C
int hammingWeight(uint32_t n) {
int res = 0;
for(int i = 0; i < 32; i++){
res = (n >> i) & 1u ? res + 1 : res;
}
return res;
}

1281. 整数的各位积和之差

解题思路

取出每一位数进行累加和累乘

代码

1
2
3
4
5
6
7
8
9
10
11
12
// C
int subtractProductAndSum(int n){
int sum = 0;
int product = 1;
while(n > 0){
int m = n % 10;
sum += m;
product *= m;
n /= 10;
}
return product - sum;
}

704. 二分查找

解题思路

将数分成两堆,如果不在左边就在右边,一直这样分,直到找出或者没找出来为止

代码

1
2
3
4
5
6
7
8
9
10
11
// C
int search(int* nums, int numsSize, int target){
int l = 0, r = numsSize - 1;
while(l <= r){
int m = (r - l) / 2 + l;
if(nums[m] == target) return m;
if(nums[m] > target) r = m - 1;
if(nums[m] < target) l = m + 1;
}
return -1;
}