1.概念定义
1.矩阵的定义
矩阵A(nm)的定义时按照长方形排列的复数或实数集合,其中n代表的是行数,m代表的是列数。如下所示,代表的是一个4x3的矩阵
在Java中,我们可以用A[n][m]来代表一个n*m的矩阵,其中A[i][j]代表的是第i行,第j列的值。
2.矩阵的水平翻转
矩阵的水平翻转,就是将矩阵的每一行的元素进行排序,矩阵A(4x3)水平翻转后的结果如下所示:
3.矩阵的垂直翻转
矩阵的垂直翻转,就是将矩阵的每一列的元素进行逆序,矩阵A(4x3)水平垂直翻转后的结果如下所示:
4.矩阵的顺时针翻转
矩阵的顺序表旋转90度,简单来说,就是绕着垂直屏幕向里的方向,对矩阵进行90度旋转,这时候行列会交换,所以矩阵A(4x3)顺时针90度旋转后的结果如下所示:
5.矩阵的逆时针旋转
矩阵的逆时针旋转90度,我们乐意理解成顺时针旋转270度,所以就是做3次顺时针旋转90度的操作
6.矩阵的转置
矩阵的转置,就是对矩阵的主对角线对称的元素进行交换操作,矩阵A(4x3)转置的结果如下:
7.二维数组
二维数组可以用来描述矩阵,定义如下(3行4列)
int[][] num=new int[4][3];
怎样才能实现二维数组中的初始化呢?(如果定义)
int[][] num=new int[5][];//第一个数是必须填的
int[][] num=new int[][5];//而这样是编译不通过的
int[][] num=new int[][]{{1,2,3},{1,5,6},{6,3,5}};
本质上,你可以把二维数组理解成一个一维数组,只不过一维数组的每一个元素,也是一个一维数组
8.二维数组的索引
数组中下标从0开始,那么,如果要取得数组中的i行j列的元素,可以通过a[i-1][j-1]进行获的
leetcode题单:
统计有序矩阵中的负数
public int countNegatives(int[][] grid) {
int count=0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]<0){
count++;
}
}
}
return count;
}
最富有客户的资产总量
public int maximumWealth(int[][] accounts) {
int ans=0;
for(int i=0;i<accounts.length;i++){
int sum=0;
for(int num:accounts[i]){
sum+=num;
}
ans=Math.max(ans,sum);
}
return ans;
}
矩阵对角线元素之和
public int diagonalSum(int[][] mat) {
int n = mat.length, sum = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
//i==j i+j==n-1这里需要自己揣摩一哈
if (i == j || i + j == n - 1) {
sum += mat[i][j];
}
}
}
return sum;
}