伙计们,我一直在分析以下关于矩阵旋转90度的代码:
static int[][] rotateCW(int[][] mat) {
final int M = mat.length;
final int N = mat[0].length;
int[][] ret = new int[N][M];
for (int r = 0; r < mat.length; r++) {
for (int c = 0; c < mat[0].length; c++) {
ret[c][mat.length-1-r] = mat[r][c];
}
}
return ret;
}
代码工作正常。
我不明白为什么c < mat[0].length
不应该是c < mat[i].length
?
答案 0 :(得分:1)
矩阵对于所有行具有相同的长度(即每行中的列数相同),因此如果>>> f = open('myimage.jpg', 'rb')
是矩阵,mat
对于任何行都等于mat[0].length
从mat[i].length
到i
的{{1}}。因此,如果您撰写0
或mat.length-1
,则无关紧要。
答案 1 :(得分:1)
代码应为:
for (int r = 0; r < M; r++) {
for (int c = 0; c < N; c++) {
ret[c][M-1-r] = mat[r][c];
...
由于使用M
和N
速度更快,因此可以节省存储访问的间接性。
另请注意:
final int M = mat.length; // number of rows
final int N = mat[0].length; // number of columns
因为任何matrix的任何行中的列数相等。
for for循环ret[c][mat.length-1-r]
或ret[c][M-1-r]
是每行的 last-to-first 列,其中mat[r][c]
是每行的第一个到最后一个列
答案 2 :(得分:0)
他们正在检查矩阵的长度。由于长度相同,解决方案是正确的。它当然不应该是c < mat[i].length
,因为范围内不知道i
,它应该(实际上)c < mat[0].length
或更好:c < N
。
答案 3 :(得分:0)
mat[0].length representing the column length.