6192. 公因子的数目
枚举
class Solution {
public int commonFactors(int a, int b) {
int de = Math.min(a,b);
int ans = 0;
for (int i = 1; i <= de; i++) {
if (a % i == 0 && b % i == 0) {
ans++;
}
}
return ans;
}
}
6193. 沙漏的最大总和
模拟
class Solution {
public int maxSum(int[][] grid) {
int ans = 0;
int m = grid.length, n = grid[0].length;
int[][] dir = new int[][]{{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
for (int i = 1; i < m - 1; i++) {
for (int j = 1; j < n - 1; j++) {
int tmp = grid[i][j];
for (int[] di : dir) {
int ni = i + di[0];
int nj = j + di[1];
tmp += grid[ni][nj];
}
ans = Math.max(ans,tmp);
}
}
return ans;
}
}
6194. 最小 XOR
统计num2的1的个数,从左向右抵消num1上的1,直到遍历num1结束或者num2的1用光了。
若num2的1有剩余,应当从右向左布置在num1上0的位置。
class Solution {
public int minimizeXor(int num1, int num2) {
int cnt1 = 0, cnt2 = 0;
for (int i = 31; i >= 0; i--) {
if ((num1 >> i & 1) == 1) {
cnt1++;
}
if ((num2 >> i & 1) == 1) {
cnt2++;
}
}
if (cnt1 == cnt2) {
return num1;
}
int ans = 0;
for (int i = 31; i >= 0 && cnt2 > 0; i--) {
if ((num1 >> i & 1) == 1) {
ans |= 1 << i;
cnt2--;
}
}
if (cnt2 > 0) {
for (int i = 0; i < 31 && cnt2 > 0; i++) {
if ((ans >> i & 1) == 0) {
ans |= 1 << i;
cnt2--;
}
}
}
return ans;
}
}