leetcodeの問題を解いています。
Cells with Odd Values in a Matrix
インプットが n = 2, m = 3, indices = [[0,1],[1,1]]の場合、
2行3列のマトリクスができて、indicesに入っている配列がそれぞれ[行,列]に該当し、
1ずつ加算されていきます。
例えば、indices[0]は[0,1]ですが、マトリクスの0行目にすべてプラス1、1列目にすべてプラス1、という具合です。
最終的なアウトプットはマトリクス内の奇数の数を出力することなのですが、これに対する解法で理解できない箇所があります。
java
1 public int oddCells(int n, int m, int[][] indices) { 2 boolean[] oddRows = new boolean[n], oddCols = new boolean[m]; 3 for (int[] idx : indices) { 4 oddRows[idx[0]] ^= true; // if row idx[0] appears odd times, it will correspond to true. 5 oddCols[idx[1]] ^= true; // if column idx[1] appears odd times, it will correspond to true. 6 } 7 int cnt = 0; 8 for (int i = 0; i < n; ++i) { 9 for (int j = 0; j < m; ++j) { 10 cnt += oddRows[i] ^ oddCols[j] ? 1 : 0; // only cell (i, j) with odd times count of row + column would get odd values. 11 } 12 } 13 return cnt; 14 } 15
特にこの
oddRows[idx[0]] ^= true;
に関してなのですが、^=がXORであることは調べてわかりましたが、なぜ^=をつかうことで、idx[0]が奇数回出現した場合にTrueにできるのかがいまいちわかりません。
詳細をおしえていただけますと幸いです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/01 01:55