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++,即可找到一共有几个数。
|