Day 7 二维数组
概念定义
矩阵的定义
矩阵的水平翻转
对于每一行元素进行逆序,比如001变成100,120变成012
矩阵的垂直翻转
对于每一列元素进行逆序,比如
0 → 1
0 → 1
1 → 0
1 → 0
矩阵的顺时针旋转
按照视觉方向,顺时针转90度
矩阵的逆时针旋转
按照视觉方向,顺时针转270度
矩阵的转置
对矩阵的主对角线对称的元素进行交换
主对角线:左上角到右下角这一斜线方向上的n 个元素所在的对角线
二维数组
在C中,通过描述矩阵来形成二维数组
int a[3][4];
或者对于数组内的元素进行初始化
int a[3][4] = {
{5, 2, 0, 4}
{1, 3, 1, 7}
{4, 0, 0, 9}
};
或者对于部分进行初始化,让编译器自动识别有多少个数据(第二个不能省略,是每个数据的长度)
int a[][4] = {
{5, 2, 0, 4}
{1, 3, 1, 7} // 识别为3x4
{4, 0, 0, 9}
};
int a[100][4] = {
{5, 2, 0, 4}
{1, 3, 1, 7} // 识别为100x4,但是初始化前几行
{4, 0, 0, 9}
};
二维数组索引
a[0][0] // 第一个
a[i][j] // 第i行第j个数
二维数组的函数传参
// 一维数组传参 一个*
int add(int *nums, int numsSize){}
// 二维数组传参 两个*
int diagonalSum(int **mat, int matSize, int* matColSize
matSize:二维数组第一维大小,有多少行
int* matColSize:一个一位数组,每一行有多少列,matColsize[0]代表第0行有matColSize[0]列,matColSize[i]代表第1i行就有matColSize[i]列
由于矩阵每一列元素都一样,所以初始化可以根据如下形式
int diagonalSum(int** mat, int matSize, int* matColSize{
r = matSize;
c = matColSize[0];
//
}
题目练习
LC 1351 统计有序矩阵中的负数
初始化 r 为矩阵数据个数,grid[r]为最后一个数据
初始化 c 为矩阵每个数据的长度,grid[r][c]为最后一个数据中的最后一个数
初始化 i,j,ans 为0为后续遍历
首先遍历每一个数据,grid[0]到grid[r],在遍历中每一个数据为grid[i]
在每一个grid[i]中,grid[i][0]到grid[i][c],在遍历中每一个数据的数据为grid[i][j]
遍历每一个grid[i][j],查看是否小于0,若小于0,ans自加1
LC 1572 矩阵对角元素的和
- 统计所有主对称轴上的值的总和,即mat[i][i]
- 统计所有辅对称轴上的值的总和,即mat[i][r-i-1]
- 在2中去掉重复项,即r-i-1 = i的情况
LC 1672 最富有客户的资产总量
- 初始化参数,这里对于每一个数据的数据长度需要带*进行初始化
- 初始化参数,设定临时最大值为sumValue,总体最大值为maxValue
- 对于每一个客户,统计他们所有的财产总值,并记为sumValue
- 如果 sumValue大于当前最大总和maxValue,更新maxValue,并记录该客户的id(位于数据中的位置,即i)
- 返回maxValue
LC 766 托普利茨矩阵
- 根据描述写出判断语句
- 做两个遍历抓取数字进行判断是否相等