思路
- 找规律
- 异或
情况一:A[$i$][$left$]=0,A[$i$][$right$]=0。对第 $i$ 行进行水平翻转之后,A[$i$][$left$]=0,A[$i$][$right$]=0。进行反转之后,A[$i$][$left$]=1,A[$i$][$right$]=1。
情况二:A[$i$][$left$]=1,A[$i$][$right$]=1。对第 $i$ 行进行水平翻转之后,A[$i$][$left$]=1,A[$i$][$right$]=1。进行反转之后,A[$i$][$left$]=0,A[$i$][$right$]=0。
情况三:A[$i$][$left$]=0,A[$i$][$right$]=1。对第 $i$ 行进行水平翻转之后,A[$i$][$left$]=1,A[$i$][$right$]=0。进行反转之后,A[$i$][$left$]=0,A[$i$][$right$]=1。
情况四:A[$i$][$left$]=1,A[$i$][$right$]=0。对第 $i$ 行进行水平翻转之后,A[$i$][$left$]=0,A[$i$][$right$]=1。进行反转之后,A[$i$][$left$]=1,A[$i$][$right$]=0。
情况一和情况二 元素被反转
情况三和情况四 元素值发生了两次改变,恢复原状
遍历矩阵的每一行。对于矩阵的第 $i$ 行,初始化 $left=0$ 和 $right=n−1$,进行如下操作:
当$left<right$,判断A[$i$][$left$]和A[$i$][$right$]是否相等,如果相等则对A[$i$][$left$]和A[$i$][$right$]的值进行反转,如果不相等则不进行任何操作
将 $left$ 的值加1,将 $right$ 的值减1,重复上述操作,直到 $left \ge right$
如果 $n$ 是奇数,则上述操作结束时,$left$ 和 $right$ 的值相等,都指向第 $i$ 行的中间元素,此时需要对中间元素的值进行反转。
拓展
- $n$为偶数时,
n^=1
n=n+1
例:n=0 n^=1 -> n=1
$n$为奇数时,n^=1
n=n-1
例:n=1 n^=1 -> n=0
代码
1 | class Solution { |