59. Spiral Matrix II 54. Spiral Matrix

2023-12-12 07:58
文章标签 ii 59 matrix 54 spiral

本文主要是介绍59. Spiral Matrix II 54. Spiral Matrix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Given an integer n, generate a square matrix filled with elements from 1 ton2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:
[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]
]
 
这道题目比较有意思 但似乎一开始没什么思路。于是参考的discussion:螺旋形加入数值可以看作一种循环,每个循环里面在四个方向上加入数值,用四个参数来保存上下左右的边界,最后上下边界相等时循环结束。在循环内,每次结束一个方向的赋值就有一个边界的大小发生变化。
class Solution {public int[][] generateMatrix(int n) {int top=0,left=0;int bottom=n-1,right=n-1;int[][] res = new int[n][n];int count=1;while(left<=right){for(int i=left;i<=right;i++)res[top][i] = count++;top++;for(int i=top;i<=bottom;i++)res[i][right] = count++;right--;for(int i=right;i>=left;i--)res[bottom][i]=count++;bottom--;for(int i=bottom;i>=top;i--)res[i][left]=count++;left++;}return res;}
}


54. Spiral Matrix                   

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].

这两道题目区别主要在:上一道题目是方阵,所以右边界和下边界是一样的,不用分开判断,所以在while循环中这道题就要有有两个条件。那么代码就是:

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res=new ArrayList<Integer>();int m = matrix.length;if(m==0)return res;int n = matrix[0].length;int left =0,top=0;int right=n-1,bottom=m-1;while(left<=right&&top<=bottom){for(int i=left;i<=right;i++)res.add(matrix[top][i]);top++;for(int i=top;i<=bottom;i++)res.add(matrix[i][right]);right--;for(int i=right;i>=left;i--)res.add(matrix[bottom][i]);bottom--;for(int i=bottom;i>=top;i--)res.add(matrix[i][left]);left++;}return res;}
}

但是考虑两种情况:[[7,9,6]]和[[7].[9],[6]].前者结果是[[7,9,6,9]],后者结果是[[7],[9],[6],[9]],多了一个数字,这是为什么呢?经过走一次全过程发现:在最后一个循环中后面两个for循环其实已经不能执行了,但是因为while已经判断过不能及时跳出循环。 因此,在后面两个for循环上还要加上一个判断:

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res=new ArrayList<Integer>();int m = matrix.length;if(m==0)return res;int n = matrix[0].length;int left =0,top=0;int right=n-1,bottom=m-1;while(left<=right&&top<=bottom){for(int i=left;i<=right;i++)res.add(matrix[top][i]);top++;for(int i=top;i<=bottom;i++)res.add(matrix[i][right]);right--;if(top<=bottom&&left<=right){for(int i=right;i>=left;i--)res.add(matrix[bottom][i]);bottom--;for(int i=bottom;i>=top;i--)res.add(matrix[i][left]);left++;}}return res;}
}


这篇关于59. Spiral Matrix II 54. Spiral Matrix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483832

相关文章

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

认知杂谈54

I I 内容摘要: 这篇内容主要有以下几个要点:首先,沟通不在一个调时可学习人际交往心理学知识、线上课程及关注名师来改善。其次,挑房子、工作、搭档和人生伴侣要谨慎,找心灵相通能共同进步的人。再者,远离负能量的人,多跟积极向上的人相处攒正能量。然后,人生如爬山,要专注自身步伐,不与他人比较,坚持目标,可通过看《微习惯》、用专注 APP、参加训练营提升专注力和自律能力。此外,别瞎操心他人,每个人有自

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt