use*_*514 10 java arrays algorithm
我有一个二维数组,我需要顺时针旋转90度,但我不断得到arrayindexoutofbounds ...
public int[][] rorateArray(int[][] arr){
//first change the dimensions vertical length for horizontal length
//and viceversa
int[][] newArray = new int[arr[0].length][arr.length];
//invert values 90 degrees clockwise by starting from button of
//array to top and from left to right
int ii = 0;
int jj = 0;
for(int i=0; i<arr[0].length; i++){
for(int j=arr.length-1; j>=0; j--){
newArray[ii][jj] = arr[i][j];
jj++;
}
ii++;
}
return newArray;
}
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 37
这是标准矩阵顺时针旋转代码:
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 < M; r++) {
for (int c = 0; c < N; c++) {
ret[c][M-1-r] = mat[r][c];
}
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
请注意以下几点:
M和Nr, c而不是i, j索引矩阵的行和列mat是有效的MxN矩阵,M>0, N>0这是一个测试工具:
import java.util.Arrays;
//...
static void printMatrix(int[][] mat) {
System.out.println("Matrix = ");
for (int[] row : mat) {
System.out.println(Arrays.toString(row));
}
}
public static void main(String[] args){
int[][] mat = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};
printMatrix(mat);
// Matrix =
// [1, 2, 3]
// [4, 5, 6]
int[][] matCW = rotateCW(mat);
printMatrix(matCW);
// Matrix =
// [4, 1]
// [5, 2]
// [6, 3]
}
Run Code Online (Sandbox Code Playgroud)
注意使用for-each循环和java.util.Arraysin printMatrix.如果你在Java中使用大量的数组,你一定要熟悉它们.
如果您经常使用矩阵,您可能需要考虑使用专门的矩阵库.
从技术上讲,Java有阵列数组.确保您了解所有含义.
Ale*_*lli 14
我不明白你的循环的逻辑 - 不应该
for(int i=0; i<arr[0].length; i++){
for(int j=arr.length-1; j>=0; j--){
newArray[i][j] = arr[j][i];
}
}
Run Code Online (Sandbox Code Playgroud)
是否每个指数上涨,如此i处或下跌,如此j处(以及是否需要在任务中"翻转"其中一个或两个,例如arr.length-1-j在任务的j一侧使用代替平原=;-)中,由于arr尺寸是arr.length由arr[0].length,反之亦然为newArray,在我看来,关于第一索引arr(第二上newArray)必须是一个跨越从0至arr.length-1包括,其它范围的其他指标.
这是一种"基本尺寸分析"(除了"尺寸"用于与通常用于"尺寸分析"不同的意义上的"尺寸分析",其指的是物理尺寸,即时间,质量,长度,&c ;-)."翻转"和每个循环上升或下降的问题取决于可视化你的意思,我不是最伟大的"心理可视化器"所以我认为,在现实生活中,我会尝试各种变体"轴换位"直到我击中了那个意思;-).
| 归档时间: |
|
| 查看次数: |
52185 次 |
| 最近记录: |