当前位置: 首页 > news >正文

4.4 力扣|59螺旋矩阵II

原题链接:螺旋矩阵II

类型:模拟

解题过程:

错误代码:
#include<bits/stdc++.h>
using namespace std;
    vector<vector<int> > generateMatrix(int n) {
        vector<vector<int> >mat(n,vector<int>(n));
        int t=1;//填充的数字从1开始 
        int x=1,y=n;
//先考虑填满外圈
        while(t<=n*n){
        for(int i=x;i<=n;i++){
            mat[x][i]=t;//上圈,第一行的每个
            t++; 
        }
        for(int i=x;i<=n;i++){
            mat[i][y]=t;t++;//右圈,第n列的每个
        }
        for(int i=x;i<=n;i++){
            mat[y][i]=t;t++;//下圈
        }
        for(int i=x;i<=n;i++){
            mat[i][x]=t;t++;
        }
        x++;
        n--; }
        return mat;
    }
	int main(){
		int n;cin>>n;
		 vector<vector<int> > mat=generateMatrix( n);
		 for(int i=1;i<=n;i++){
		 for(int j=1;j<=n;j++){
		 	cout<<mat[i][j]; 
		 } 
		 cout<<'\n';}
		 return 0;
	}
错因: 

 /*错因:混淆了一点,用x,y代表了所有的边界,错误
    第一轮,              
    上:x=1,y=n
    右:x=2,y=n
    下:x=n-1,y=1
    左:x=n-1,y=1 
    
    第二轮:
    上:x=2,y=n-1
    右:x=3,y=n-1
    下:x=n-2,y=2
    左:x=n-2,y=2 
所以,上下可以用同一组来表示,左右可以用同一组表示,两组*/     

修正: 
	
//修正: 
#include<bits/stdc++.h>
using namespace std;
    vector<vector<int> > generateMatrix(int n) {
        vector<vector<int> >mat(n,vector<int>(n));
        int t=1;//填充的数字从1开始 
        int top=0,bottom=n-1,left=0,right=n-1;
		//分别代表:上边界的行数、下边界的行数、左边界的列数、右边界的列数 

        //先考虑填满外圈,每次都相当于填满外圈,只不过是边界不同 
        while(t<=n*n){
        for(int i=left;i<=right;i++){
            mat[left][i]=t;t++;//上圈
        } top++;
        
        for(int i=top;i<=bottom;i++){
            mat[i][right]=t;t++;//右圈
        } right--;
        
        for(int i=right;i>=left;i--){
            mat[bottom][i]=t;t++;//下圈
        } bottom--;
        
        for(int i=bottom;i>=top;i--){
            mat[i][left]=t;t++;//左圈 
        } left++;
     }
        return mat;
    }
	int main(){
		int n;cin>>n;
		 vector<vector<int> > mat=generateMatrix( n);
		 for(int i=0;i<n;i++){
		 for(int j=0;j<n;j++){
		 	cout<<mat[i][j]<<" "; 
		 } 
		 cout<<'\n';}
		 return 0;
	} 	
	

总结:

1、模拟题,在纸上模拟一下过程,第一轮、第二轮......更快找到思路

2、边界的变化容易搞混,使用意义清晰的名字非常有必要

http://www.dtcms.com/a/112642.html

相关文章:

  • AI与Python在地球科学多源数据交叉融合中的前沿
  • MCP(模型上下文协议)入门指南:用Web开发的视角理解下一代AI引擎
  • 集合与容器:List、HashMap(II)
  • 用 Docker Compose 与 Nginx 反向代理部署 Vikunja 待办事项管理系统
  • Leetcode 135 -- 贪心 | 拓扑排序
  • 【多线程-第四天-自己模拟SDWebImage的下载图片功能-下载操作管理类 Objective-C语言】
  • 如何排查、定位 SQL 慢查询及其优化策略
  • 16进制在蓝牙传输中的应用
  • 检查 Python 中的可迭代对象是否相等
  • Bethune X 6发布:为小规模数据库环境打造轻量化智能监控巡检利器
  • 字符串-JS
  • 基于 Hough 变换的直线检测2025.4.1
  • 大数据笔试题_第一阶段配套笔试题01
  • 浅谈AI落地 - 文章推荐 - 混合推荐模型
  • 【CF】Day24——Codeforces Round 994 (Div. 2) D
  • 常用性能指标(metrics)
  • 理解OSPF 特殊区域Stub和各类LSA特点
  • leetcode-链表+动规
  • idea如何让打开的文件名tab多行显示
  • Android studio进阶教程之(二)--如何导入高德地图
  • 超便捷语音转文字工具CapsWriter-Offline本地部署与远程使用全流程
  • 如何快速入门物联网单片机开发?
  • windows如何安装wkhtmltoimage 给PHP使用根据HTML生成图片
  • Mysql 中的 binlog、redolog、undolog
  • LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系统、TileMap等全面升级!
  • 青少年编程与数学 02-015 大学数学知识点 09课题、专业相关性分析
  • 洛谷题单3-P5724 【深基4.习5】求极差 最大跨度值 最大值和最小值的差-python-流程图重构
  • css 文字换行每一个字渐变
  • go游戏后端开发25:红中麻将规则介绍
  • Modbus RTU与TCP通信示例