0. 知识&概念
- 范式
int countNegatives(int** grid, int gridSize, int* gridColSize){
int r = gridSize; /行数/
int c = gridColSize[0];/列数/
1.解题报告
Q1:1351. 统计有序矩阵中的负数
/*遍历*/
int countNegatives(int** grid, int gridSize, int* gridColSize){
int r = gridSize; /*行数*/
int c = gridColSize[0];/*列数*/
int cnt=0;
int i,j;
for(i=0;i<r;++i)
{
for(j=0;j<c;++j)
{
if(*(*(grid+i)+j) < 0)
{
cnt++;
}
}
}
return cnt;
}
Q2:1572. 矩阵对角线元素的和
int diagonalSum(int** mat, int matSize, int* matColSize){
int r = matSize;
//int c = *(matColSize);
int ans = 0;
/*先求正对角线*/
int i;
for(i=0;i<r;++i)
{
ans += *(*(mat+i)+i);
}
/*副对角线*/
for(i=0;i<r;++i)
{
if(i != r-1-i)/*如果有重合点,去掉*/
{
ans +=*(*(mat+i)+(r-1-i));
}
}
return ans;
}
Q3:1672. 最富有客户的资产总量
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){
/*打擂台,遍历*/
int r = accountsSize;
int c = *(accountsColSize);
int max=0;
int i,j,sum=0;
for(i=0;i<r;++i)
{
sum =0;
for(j=0;j<c;++j)
{
sum +=accounts[i][j];
if(sum > max)
{
max = sum;
}
}
}
return max;
}
Q4:766. 托普利茨矩阵
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){
int r = matrixSize;
int c = *matrixColSize;
/*先从纵向判断,遍历行*/
int i;//行的移动
int j,k;//列的移动
int sum;
for(i = 0;i<r-1;i++)/*i<r-1,一个数就不判断了*/
{
sum = matrix[i][0];
for(k=1;k+i<r && k<c;k++)/*k代表列,所以k<c*/
{
if(matrix[i+k][k] != sum)
{
return false;
}
}
}
/*再横向判断*/
for(j = 1;j<c-1;++j)
{
sum = matrix[0][j];
for(k=1;k<r&&j+k<c;k++)/*注意,k代表行,所以k<r*/
{
if(matrix[k][j+k] != sum)
{
return false;
}
}
}
return true;
}
2.思考总结
(1)数组越界,指针变量写错,会造成内存报错。
(2)每一个判断表达式都得有意义,程序要求逻辑非常严密。