标签:简单 nta main src 两种 contain 技术 system 相关
题目来源于力扣(LeetCode)
题目相关标签:数组
提示:
1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1
存在规律:先翻转再反转,而二维数组中的元素只有 0 和 1 两种
通过左右双指针来遍历矩阵中的每个一维数组
当要翻转的左右两个元素相同时,两个数字都进行取反(即 0 变成 1,1 变成 0),取反后的结果相当于既完成了翻转,也同时完成了反转
要翻转的两个元素不同时,不需要改变(因为只有 0 和 1 两个元素,翻转后再反转等于没变)
public static int[][] flipAndInvertImage(int[][] A) {
for (int i = 0; i < A.length; i++) {
int[] arr = A[i];
int left = 0;
int right = arr.length - 1;
// 双指针遍历每个矩阵行
while (left <= right) {
// 规律,要翻转的两个数字相同时,两个数字都取反(即 0 变成 1,1 变成 0)
// 既完成了翻转,也同时完成了反转
// 要翻转的数字不同时,不需要改变(因为只有 0 和 1 两个元素,翻转后再反转等于没变)
if (arr[left] == arr[right]) {
if (arr[left] == 0) {
arr[left] = 1;
arr[right] = 1;
} else {
arr[left] = 0;
arr[right] = 0;
}
}
left ++;
right --;
}
}
return A;
}
public static void main(String[] args) {
int[][] A = {{1, 1, 0}, {1, 0, 1}, {0, 0, 0}};
// output: {{1, 0, 0}, {0, 1, 0}, {1, 1, 1}}
// int[][] A = {{1, 1, 0, 0}, {1, 0, 0, 1}, {0, 1, 1, 1}, {1, 0, 1, 0}};
// output: {{1, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 0, 1}, {1, 0, 1, 0}}
flipAndInvertImage(A);
System.out.println(Arrays.toString(A));
}
标签:简单 nta main src 两种 contain 技术 system 相关
原文地址:https://www.cnblogs.com/zhiyin1209/p/13095930.html