诺亚方舟——第七天

第七天!!!!
——————————————————————————————————————————————————————————————————————————————————————————————————————————
学习内容:
1.
    矩阵->二维数组
    矩阵翻转 旋转 转置
例子代码:
#include<stdio.h>

int main()
{
    int nums[3][4]={1,2,3,4,
                    5,6,7,8,
                    9,10,11,12};
    printf("原矩阵:\n");
    for(int i=0;i<3;i++){
        for(int j=0;j<4;j++)
            printf("%-2d ",nums[i][j]);
            putchar('\n');
        }
        putchar('\n');
    printf("水平翻转后的矩阵:\n");
    for(int i=0;i<3;i++){
        for(int j=3;j>=0;j--)
            printf("%-2d ",nums[i][j]);
            putchar('\n');
        }
        putchar('\n');
    printf("垂直翻转后的矩阵:\n");
    for(int i=2;i>=0;i--){
        for(int j=0;j<4;j++)
            printf("%-2d ",nums[i][j]);
            putchar('\n');
        }
        putchar('\n');
    printf("顺时针旋转后的矩阵:\n");
    for(int i=0;i<4;i++){
        for(int j=2;j>=0;j--)
            printf("%-2d ",nums[j][i]);
            putchar('\n');
        }
        putchar('\n');
    printf("逆时针旋转后的矩阵:\n");
    for(int i=3;i>=0;i--){
        for(int j=0;j<3;j++)
            printf("%-2d ",nums[j][i]);
            putchar('\n');
    }
        putchar('\n');
    printf("转置(对矩阵的主对角线对称的元素进行交换)后的矩阵:\n");
    for(int i=0;i<4;i++){
        for(int j=0;j<3;j++)
            printf("%-2d ",nums[j][i]);
            putchar('\n');
        }
        putchar('\n');
}
2.二维数组的函数传参
例子:
int diagonalSum(int **mat,int matSize,int *matColSize){
}
    mat        数组名—>数组首行地址
    matSize        有多少行,我理解为有多少个一维数组
    *matColSize     每个一维数组中有多少个元素
————————————————————————————————————————————
课后习题:
1.力扣 351. 统计有序矩阵中的负数
int countNegatives(int** grid, int gridSize, int* gridColSize){

        int count=0;
    for(int i=0;i<gridSize;i++)
        for(int j=0;j<*gridColSize;j++)
            if(grid[i][j]<0)
                count++;

        return count;

}
2.力扣 572.矩阵对角线元素的和
int diagonalSum(int** mat, int matSize, int* matColSize){

                 int sum=0;
        for(int i=0;i<matSize;i++)
            for(int j=0;j<*matColSize;j++)
                if(i==j||i+j==matSize-1)
                    sum+=mat[i][j];
            return sum;

}
3.力扣 672.最富有客户的资产总量
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){
            int max=0;
            int sum=0;
        for(int i=0;i<accountsSize;i++){
            sum=0;
            for(int j=0;j<*accountsColSize;j++)
                sum+=accounts[i][j];
            max=max>sum?max:sum;
        }
        return max;

}
4.力扣 766. 托普利茨矩阵
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){
    if(matrixColSize<=1||*matrixColSize<=1)
        return true;
        for(int i=1;i<matrixSize;i++)
            for(int j=1;j<*matrixColSize;j++)
                if(matrix[i-1][j-1]!=matrix[i][j])
                    return false;
            return true;
}
5.力扣 1380.矩阵中的幸运数
思路:先找出第一行最小的元素,并且记录他是第几列的,然后遍历看他是不是这列
最大的元素,是就break退出,不是则继续查找
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
    int INj;
    int is=1;
    int min;
    int *ret=(int *)malloc(sizeof(int));
    int count=0;
    for(int i=0;i<matrixSize;i++){
        is=1;
        min=matrix[i][0];
        INj=0;
            for(int j=1;j<*matrixColSize;j++)
            {
                if(min>matrix[i][j]){
                    min=matrix[i][j];
                    INj=j;
                }
            }
            for(int k=0;k<matrixSize;k++)
            {
                if(min<matrix[k][INj])
                    is=0;
            }
            if(is==1){
                    *ret=min;
                    count++;
                    break;
                }
    }
    *returnSize=count;
    return ret;
}
6.力扣 1582.二进制矩阵中的特殊位置
思路:先遍历一行,找出1的个数,如果这一行1的个数是1,
才进行下一步判断,不是1个的话,就查找下一行,如果找到只有一个1的那一行,
就判断他这一列是不是只有他1个1,是的话计数加一,不是就再次查找。
int numSpecial(int** mat, int matSize, int* matColSize){
    int isi,isj;
    int INj;
    int count=0;
    for(int i=0;i<matSize;i++){
        isi=0;
        isj=0;
        for(int j=0;j<*matColSize;j++){
                if(mat[i][j]==1){
                    isj++;
                    INj=j;
                    }
        }
            if(isj==1){
            for(int k=0;k<matSize;k++){
                if(mat[k][INj]==1)
                    isi++;}
            }
            if(isi==1&&isj==1)
                count++;
        }
        return count;
}
7.力扣 463.岛屿的周长
思路:遍历判断(上下左右)遇到边界或者0我周长就加一!
int islandPerimeter(int** grid, int gridSize, int* gridColSize){
    int count=0;
    for(int i=0;i<gridSize;i++){
        for(int j=0;j<*gridColSize;j++){
            if(grid[i][j]==1)
            {
                if(i==0)
                    count++;
                if(j==0)
                    count++;
                if(i==gridSize-1)
                    count++;
                if(j==*gridColSize-1)
                    count++;
                if(i!=0&&grid[i-1][j]==0)count++;
                if(i!=gridSize-1&&grid[i+1][j]==0)count++;
                if(j!=0&&grid[i][j-1]==0)count++;
                if(j!=*gridColSize-1&&grid[i][j+1]==0)count++;
            }
        }
    }
        return count;
}

——————————————————————————————————————————

总结:今天又晚啦些,但今天都是自己搞出来的,不错不错明天加油!(不过我晚睡有女朋友陪,你们呢?哈哈哈哈)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值