leetcode 54. Spiral Matrix 螺旋方式读取矩阵
来源:互联网 发布:大数据应用方向 编辑:程序博客网 时间:2024/06/05 02:26
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].
本题要求按照螺旋方式读取矩阵,并输出到一个向量中。题意很简单,关键就是如何去做。
我是参考网上的一个教程,然后想了一下,自己写出了答案,这个做法很漂亮,很值得借鉴,直接上代码吧!需要注意的地方就是控制循环的出口。
代码如下:
import java.util.ArrayList;import java.util.List;/* * 这些做法很漂亮,分别控制4个边界指针,然后读取元素 * * */public class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res=new ArrayList<Integer>(); if(matrix==null || matrix.length<=0) return res; int left=0,right=matrix[0].length-1; int top=0,bottom=matrix.length-1; while(true) { //从左到右 for(int i=left;i<=right;i++) res.add(matrix[top][i]); top++; if(top>bottom) break; //从上到下 for(int i=top;i<=bottom;i++) res.add(matrix[i][right]); right--; if(left>right) break; //从右到左 for(int i=right;i>=left;i--) res.add(matrix[bottom][i]); bottom--; if(top>bottom) break; //从下到上 for(int i=bottom;i>=top;i--) res.add(matrix[i][left]); left++; if(left>right) break; } return res; }}
下面是C++的做法,很棒的做法
代码如下:
#include <iostream>#include <vector>using namespace std;class Solution {public: vector<int> spiralOrder(vector<vector<int>>& mat) { vector<int> res; if (mat.size() <= 0) return res; int left = 0, right = mat[0].size()-1; int up = 0, down = mat.size()-1; while (true) { for (int i = left; i <= right; i++) res.push_back(mat[up][i]); up++; if (up > down) break; for (int i = up; i <= down;i++) res.push_back(mat[i][right]); right--; if (left > right) break; for (int i = right; i >= left;i--) res.push_back(mat[down][i]); down--; if (up > down) break; for (int i = down; i >= up; i--) res.push_back(mat[i][left]); left++; if (left > right) break; } return res; }};
阅读全文
0 0
- leetcode 54. Spiral Matrix 螺旋方式读取矩阵
- LeetCode 54. Spiral Matrix(螺旋矩阵)
- LeetCode Spiral Matrix(螺旋矩阵)
- LeetCode------54. Spiral Matrix(螺旋二维矩阵)-----59. Spiral Matrix II(n的螺旋矩阵)
- leetcode 59. Spiral Matrix II 螺旋方式写矩阵
- 54. Spiral Matrix 螺旋矩阵
- leetCode 54.Spiral Matrix(螺旋矩阵) 解题思路和方法
- [LeetCode] Spiral Matrix 螺旋输出矩阵
- [LeetCode]-Spiral Matrix I&II 螺旋矩阵
- LeetCode Spiral Matrix II (生成螺旋矩阵)
- leetcode 59. Spiral Matrix II (螺旋矩阵)
- Spiral Matrix 螺旋矩阵
- Spiral Matrix 螺旋矩阵I
- [LintCode] 螺旋矩阵 Spiral Matrix
- *[Lintcode]Spiral Matrix螺旋矩阵
- [算法][LeetCode]Spiral Matrix——螺旋矩阵
- LeetCode | Spiral Matrix II(螺旋矩阵填充数据)
- LeetCode OJ 之 Spiral Matrix (螺旋矩阵)
- Java基础简介
- spring-boot整合redis作为mysql二级缓存
- 调用七牛SDK,在上传之前限制图片尺寸大小
- js合并table单元格
- 5个强大的Java分布式缓存框架推荐
- leetcode 54. Spiral Matrix 螺旋方式读取矩阵
- 1750:陶陶摘苹果
- springmvc与Servlet3.0不依赖common包实现文件上传
- RePlugin 常见问题总结
- 「python」常用的数据类型转换
- 云数据库产品及架构设计背后的考量
- 8. String to Integer (atoi)
- [FAQ10563]如何验证APN是否添加成功?
- Docker持续部署图文详解