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

还有一个题目明天继续

相关推荐
刘家炫19 小时前
C++ 中的模版元编程
c++·现代c++·模版元编程
小白程序员成长日记19 小时前
2025.12.03 力扣每日一题
算法·leetcode·职场和发展
十五年专注C++开发19 小时前
async_simple:一个轻量级C++异步协程框架
开发语言·网络·c++·boost·asio
元亓亓亓19 小时前
LeetCode热题100--20. 有效的括号--简单
linux·算法·leetcode
熊猫_豆豆19 小时前
LeetCode 49.字母异位组合 C++解法
数据结构·算法·leetcode
2401_8612775520 小时前
func(int* num)的实现是*num=2或者int a=3,num=&a都可以吗
c语言·c++
繁华似锦respect20 小时前
lambda表达式中的循环引用问题详解
java·开发语言·c++·单例模式·设计模式·哈希算法·散列表
我要升天!20 小时前
QT -- 网络编程
c语言·开发语言·网络·c++·qt
闻缺陷则喜何志丹20 小时前
【计算几何 矢量】2280. 表示一个折线图的最少线段数|1681
c++·数学·计算几何·矢量
Unlyrical20 小时前
为什么moduo库要进行线程检查
linux·服务器·开发语言·c++·unix·muduo