java - 如何编写反转二维数组的方法
问题描述
我有这个问题要解决
编写一个方法,将整数类型的二维数组作为参数并返回数组的倒数(行变为列,反之亦然)。
这就是我通过搜索所做的,但它显示了一堆错误
public static class inverse{
public static int[][] arrayInverse(int[][] A){
int[][] B = new int[3][3];
for(int i=0; i<B.length/2;i++){
for (int j=0; j<B[i].length/2;j++) {
int swap = B[i][j];
B[B.length - i - 1] = swap;
}
}
return swap;
}
}
}
解决方案
首先,正如评论中提到的,任务是将输入数组的行变成列,反之亦然
如果输入二维数组是正方形(行数与列数相同),最有效的方法是交换主对角线下方和上方的元素:a[i][j] ⇄ a[j][i]
不使用额外的数组:
public static int[][] transposeSquare(int[][] arr) {
for (int i = 0, n = arr.length; i < n; i++) {
// select the elements only above the main diagonal
for (int j = i + 1, m = arr[i].length; j < m; j++) {
int tmp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = tmp;
}
}
return arr;
}
但是,在矩形矩阵的一般情况下,可能需要创建一个新的大小数组/矩阵M x N
而不是N x M
,并以适当的顺序从输入中复制值(然后不需要交换):
public static int[][] transpose(int[][] arr) {
int[][] result = new int[arr[0].length][arr.length];
for (int i = 0, n = arr.length; i < n; i++) {
for (int j = 0, m = arr[i].length; j < m; j++) {
result[j][i] = arr[i][j];
}
}
return result;
}
推荐阅读
- office365 - 将文件从 SharePoint Online 发布到 Yammer
- python - 对字典进行排序但出现“列表索引必须是整数,而不是元组”错误
- azure-logic-apps - 在 Azure Logic App 中使用“执行 JavaScript 代码”操作:需要集成帐户的错误
- nginx - 如何配置 Nginx 隐藏 proxy_pass 的重定向 URL
- graphql - 为 Netlify CMS 预览模板按纵横比排序图像
- javascript - 如何使用momentjs添加“小时”和“分钟”单词
- sql - 分组/数据透视表
- javascript - 函数节点中的 for 循环仅返回第一次迭代
- android - 无法正确生成 android manifest
- php - 魔术链接的签名 URL(无密码登录)