LeetCode热题100刷题8:54. 螺旋矩阵、73. 矩阵置零、48. 旋转图像

54. 螺旋矩阵

cpp 复制代码
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
		vector<int> vec;
        if(matrix.empty())
        	return vec;
        int left=0;
        int right = matrix[0].size()-1;
        int up=0;
        int down = matrix.size()-1;
        while(true) {
            for(int i=left;i<=right;++i) {
				vec.push_back(matrix[up][i]);

            }
            up++;
            if(up>down) break;
            for(int i=up;i<=down;i++) {
                vec.push_back(matrix[i][right]);
            }
            right--;
            if(right<left)	break;
            for(int i=right;i>=left;i--) {
                vec.push_back(matrix[down][i]);
            }
            down--;
            if(down<up)	break;
            for(int i=down;i>=up;i--) {
                vec.push_back(matrix[i][left]);
            }
            left++;
            if(left>right)	break;
        }
        return vec;
    }
};

73. 矩阵置零

cpp 复制代码
class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
		int flag0 = 1;
        for(int i=0 ; i<matrix.size();i++) {
            if(matrix[i][0]==0)
            	flag0=0;
        }
        for(int i=0;i<matrix.size();i++) {
            for(int j=0;j<matrix[0].size();j++) {
                if(matrix[i][j]==0)
                	matrix[i][0]=0;
            }
        }
        for(int j=1;j<matrix[0].size();j++) {
            for(int i=0;i<matrix.size();i++) {
                if(matrix[i][j]==0) {
                    for(int i=0;i<matrix.size();i++)  {
                        matrix[i][j]=0;
                    }
                    break;
                }
                else
                	continue;
            }
        }
        for(int i=0;i<matrix.size();i++) {
            if(matrix[i][0]==0) {
                for(int j=0;j<matrix[0].size();j++) {
                    matrix[i][j]=0;
                }
                continue;
            }

        }
        if(flag0==0) {
            for(int i=0;i<matrix.size();i++) {
                matrix[i][0]=0;
            }
        }
    }
};

48. 旋转图像

思路:

黑色圈住的区域是遍历范围(划分 n为奇数和偶数两种情况),其中的每个点下标(按照大致的逻辑:旋转第i行转90°变成倒数第i列 )找到旋转90、180、270、的对应下标,只需要一个变量temp暂存matrixij,然后交替替换值

cpp 复制代码
class Solution {
public:
    
    void rotate(vector<vector<int>>& matrix) {
        if(matrix.size() <=1)
            return;
        int n = matrix.size();
        if(n%2 ==0) {
            for(int i=0;i<n/2;i++) {
                for(int j=0;j<n/2;j++) {
                    int a = matrix[i][j];
                    matrix[i][j] = matrix[n-j-1][i];
                    matrix[n-j-1][i] = matrix[n-1-i][n-1-j];
                    matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
                    matrix[j][n-i-1] = a;
                }
            }
        }
        if(n%2 ==1) {
            for(int i=0;i<n/2;i++) {
                for(int j=0;j<n/2+1;j++) {
                    int a = matrix[i][j];
                    matrix[i][j] = matrix[n-j-1][i];
                    matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
                    matrix[n-1-i][n-1-j] = matrix[j][n-1-i];
                    matrix[j][n-i-1] = a;
                }
            }
        }
    }
};

还有一个题目明天继续

相关推荐
MC皮蛋侠客7 小时前
Google Test 单元测试指南
c++·单元测试·google test
艾莉丝努力练剑8 小时前
【Linux:文件】Ext系列文件系统进阶
linux·运维·服务器·c++·文件系统·文件io·ext
kkeeper~8 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
wabs6669 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_8769641310 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
basketball61610 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
嗝o゚10 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本10 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Fre丸子_11 小时前
自定义文件夹选取功能
c++
Ulyanov12 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真