的做网站公司,wordpress手机版怎么注册,齐齐哈尔网架公司,搜索引擎提交入口题目#xff1a; 给你一个正整数 n #xff0c;生成一个包含 1 到 n2 所有元素#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 来源#xff1a;力扣#xff08;LeetCode#xff09; 链接#xff1a;力扣#xff08;LeetCode#xff09;官网 - 全… 题目 给你一个正整数 n 生成一个包含 1 到 n2 所有元素且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 来源力扣LeetCode 链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台 示例 示例 1 输入n 3 输出[[1,2,3],[8,9,4],[7,6,5]] 示例 2 输入n 1 输出[[1]] 解法 创建全0二维列表根据顺时针螺旋顺序修改值。 首先初始化row为n - 1表示当前可以遍历到的最大行初始化col为n - 1表示当前可以遍历到的最大列初始化rh为1表示当前可以遍历到的行最小值为1初始化ch为0表示当前可以遍历到的列的最小值为0初始化r、c为0表示当前位置初始化flag为1表示当前状态。 一共有4种状态第1种是从左到右遍历第2种是从上到下遍历第3种是从右到左遍历第4种是从下到上遍历。遍历的总次数是n4种状态循环切换直到遍历完以下以第1种状态为例第2、3、4种状态同理。 进入第1种状态首先将修改列表r、c为当前值然后判断是否走到最大行注意最大行指的是没有遍历的元素的最右边通过col判断如果没到最大行则c自增1如果到了需要切换状态并且将col自减1表示缩小下次可遍历到的最大行即去除已遍历元素将r自增1修改状态切换后的首位置。 知识点 1.初始化二维列表比如创建并初始化全0二维列表result [[0] * n for _ in range(n)]不要使用result [[0] * n] * n因为这样在修改值的时候会把每列都修改。原因是因为Python的机制*n并没有开辟新空间都指向同一块内存但加上[]会将括号内部看作一个整体列表类型开辟独立的空间。 代码 class Solution:def generateMatrix(self, n: int) - List[List[int]]:result [[0] * n for _ in range(n)]row col n - 1rh 1ch 0flag 1r c 0for num in range(n ** 2):if flag 1:result[r][c] num 1if c col:col - 1r 1flag 2else:c 1elif flag 2:result[r][c] num 1if r row:row - 1c - 1flag 3else:r 1elif flag 3:result[r][c] num 1if c ch:ch 1r - 1flag 4else:c - 1else:result[r][c] num 1if r rh:rh 1c 1flag 1else:r - 1return result