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暂存matrix[i][j],然后交替替换值

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;
                }
            }
        }
    }
};

还有一个题目明天继续

相关推荐
虾球xz7 分钟前
游戏引擎学习第272天:显式移动转换
c++·学习·游戏引擎
DK2215127 分钟前
计算机网络基础科普
c++·计算机网络
无畏烧风44 分钟前
[C++] 一个线程打印奇数一个线程打印偶数
c++
I AM_SUN1 小时前
994. 腐烂的橘子
数据结构·c++·算法·leetcode·职场和发展
DARLING Zero two♡1 小时前
C++色彩博弈的史诗:红黑树
c++·红黑树
真的想上岸啊1 小时前
c语言第一个小游戏:贪吃蛇小游戏03
c语言·开发语言·算法
Tisfy1 小时前
LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述
leetcode··最短路·dijkstra·题解·迪杰斯特拉
龙湾开发1 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景
c++·笔记·学习·3d·图形渲染
kyle~1 小时前
C++匿名函数
开发语言·c++·人工智能
李匠20242 小时前
C++GO语言微服务之Dockerfile && docker-compose
c++·docker·微服务·架构