第一题:
class Solution {
public int countNumbers(int L, int R, int X, int Y) {
int count = 0;
// 遍历所有可能的数字,注意边界条件,因为Y是上限,所以遍历到Y+1
for (int i = 0; i <= Y; i++) {
// 检查数字i是否满足条件3和条件4
if ((i & X) == X && (i | Y) == Y) {
// 计算数字i的二进制表示中1的个数
int numOfOnes = Integer.bitCount(i);
// 检查数字i是否满足条件1和条件2
if (numOfOnes >= L && numOfOnes <= R) {
count++;
}
}
}
return count;
}
}
第二题:
动态规划,dp【i】表示以i结尾的最小子串和,min【i】表示左边的最小连续子串和,右边再来一个dp和min走一遍
然后遍历,将这两个加起来取最小就行
第三题:
贪心,将数组排个序,依次从小开始取,但是只过了45%,不知道为啥。