1,1351. 统计有序矩阵中的负数 - 力扣(LeetCode) (leetcode-cn.com)
int countNegatives(int** grid, int gridSize, int* gridColSize) { int row=gridSize; int col=gridColSize[0]; int count=0; int i=0; for(i=0;i<row;i++) { int j=0; for(j=0;j<col;j++) if(grid[i][j]<0) count++; } return count; }
遍历数组,寻找目标数即可。
2,1572. 矩阵对角线元素的和 - 力扣(LeetCode) (leetcode-cn.com)
int diagonalSum(int** mat, int matSize, int* matColSize) { int row=matSize; int col=*matColSize; int i=0; int sum=0; for(i=0;i<row;i++) { sum+=mat[i][i]; } for(i=row-1;i>=0;i--) { sum+=mat[i][row-i-1]; } if(matSize%2!=0) { sum-=mat[matSize/2][matSize/2]; } return sum; }
找到对角线的规律,注意列数是奇数时减去一个最中间的数即可。
3,1672. 最富有客户的资产总量 - 力扣(LeetCode) (leetcode-cn.com)
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize) { int row=accountsSize; int col=accountsColSize[0]; int sum=0; int i=0; int j=0; for(j=0;j<col;j++) sum+=accounts[i][j]; for(i=1;i<row;i++) { j=0; int tmp=0; for(;j<col;j++) tmp+=accounts[i][j]; if(tmp>sum) sum=tmp; } return sum; }
遍历相加,取最大即可。
4,766. 托普利茨矩阵 - 力扣(LeetCode) (leetcode-cn.com)
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize) { int row=matrixSize; int col=matrixColSize[0]; int i=0; for(i=0;i<row;i++) { int j=i+1; int k=1; //int max=col>row?col:row; for(;j<row&&k<col;j++,k++) { if(matrix[j][k]!=matrix[i][0]) return false; } } for(i=1;i<col;i++) { int j=1; int k=i+1; // int max=col>row?col:row; for(j=1;j<row&&k<col;j++,k++) { if(matrix[j][k]!=matrix[0][i]) return false; } } return true; }
思路是从0行和0列分别开始,0行的先全试完,然后0列的去试,注意找到对角线的规律。还有一个需要注意的点是,从0行,0列分别开始的原因是其是最开始的数,如果后面的数一旦没有与其相等就不需要再判断了。也就是作为基准的数已经确定了,只需要变比较的数即可。
5,1380. 矩阵中的幸运数 - 力扣(LeetCode) (leetcode-cn.com)
/** * Note: The returned array must be malloced, assume caller calls free(). */ bool num(int** arr,int i,int j,int row,int col) { int m=0; for(m=0;m<row;m++) { if(m==i) continue; if(arr[i][j]<arr[m][j]) return false; } for(m=0;m<col;m++) { if(m==j) continue; if(arr[i][j]>arr[i][m]) return false; } return true; } int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize) { int*ans=(int*)malloc(sizeof(int)*matrixSize); int i=0; int count=0; for(i=0;i<matrixSize;i++) { int j=0; for(j=0;j<*matrixColSize;j++) { if(num(matrix,i,j,matrixSize,*matrixColSize)) { ans[count]=matrix[i][j]; count++; } } } *returnSize=count; return ans; } //解法二: // int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize) // { // int row=matrixSize; // int col=*matrixColSize; // int*ans=(int*)malloc(sizeof(int)*matrixSize); // int i=0; // int count=0; // for(i=0;i<matrixSize;i++) // { // int j=0; // for(j=0;j<col;j++) // { // int m=0; // for(m=0;m<row;m++) // { // if(m==i) // continue; // if(matrix[i][j]<matrix[m][j]) // goto again; // } // for(m=0;m<col;m++) // { // if(m==j) // continue; // if(matrix[i][j]>matrix[i][m]) // goto again; // } // ans[count]=matrix[i][j]; // count++; // again: // ; // } // } // *returnSize=count; // return ans; // }
两种解法,但是大同小异,一种用函数,一种没用。思路就是遍历数组,一个一个去比,放入函数中,然后在函数中把对应的行和列确定下来,一个一个和目标数进行对比,一旦出现预期外的结果就返回false,若都过了就会返回true。这样即可找到数字。
6,1582. 二进制矩阵中的特殊位置 - 力扣(LeetCode) (leetcode-cn.com)
bool judge(int**mat,int i,int j,int row,int col) { int m=0; for(;m<row;m++) { if(m==i) continue; if(mat[m][j]!=0) return false; } for(m=0;m<col;m++) { if(m==j) continue; if(mat[i][m]!=0) return false; } return true; } int numSpecial(int** mat, int matSize, int* matColSize) { int row=matSize; int col=*matColSize; int i=0; int count=0; for(i=0;i<row;i++) { int j=0; for(j=0;j<col;j++) { if(mat[i][j]==1) if(judge(mat,i,j,row,col)) count++; } } return count; }
与上一题思路其实差不多,这题会更简洁一点,找到对应行列元素,看看是不是0即可。返回后count++,即可找到一共有几个数。