首页 > 代码库 > [leetcode]Spiral Matrix
[leetcode]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]
.
基本思路:
思路没什么特殊的,只是最普通的想法。但是值得注意的是处理旋转的细节。
代码:
vector<int> spiralOrder(vector<vector<int> > &matrix) { //C++ enum direct{toRight, toDown, toLeft, toUp}; //init record vector<vector<int> > record; vector<int> result; int m = matrix.size(); if(m == 0) return result; int n = matrix[0].size(); for(int i = 0; i < m; i++){ vector<int> tmp(n,0); record.push_back(tmp); } int allnum = m*n; //walk direct x = toRight; int i =0 ,j =0; result.push_back(matrix[0][0]); int count = 1; record[0][0] = 1; while(count < allnum){ switch(x){ case toRight: while(j+1 < n && record[i][j+1] == 0 ){ result.push_back(matrix[i][j+1]); count++; record[i][j+1] = 1; j++; } x = toDown; break; case toDown: while(i+1 < m &&record[i+1][j] == 0){ result.push_back(matrix[i+1][j]); count++; record[i+1][j] = 1; i++; } x = toLeft; break; case toLeft: while(j-1>=0 && record[i][j-1]==0){ result.push_back(matrix[i][j-1]); count++; record[i][j-1] = 1; j--; } x = toUp; break; case toUp: while(i-1 >= 0 && record[i-1][j]==0){ result.push_back(matrix[i-1][j]); count++; record[i-1][j] = 1; i--; } x = toRight; break; default: break; } } return result; }
a better implement in java
public class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<Integer>(); if (matrix.length == 0) { return res; } int rowBegin = 0; int rowEnd = matrix.length-1; int colBegin = 0; int colEnd = matrix[0].length - 1; while (rowBegin <= rowEnd && colBegin <= colEnd) { // Traverse Right for (int j = colBegin; j <= colEnd; j ++) { res.add(matrix[rowBegin][j]); } rowBegin++; // Traverse Down for (int j = rowBegin; j <= rowEnd; j ++) { res.add(matrix[j][colEnd]); } colEnd--; if (rowBegin <= rowEnd) { // Traverse Left for (int j = colEnd; j >= colBegin; j --) { res.add(matrix[rowEnd][j]); } } rowEnd--; if (colBegin <= colEnd) { // Traver Up for (int j = rowEnd; j >= rowBegin; j --) { res.add(matrix[j][colBegin]); } } colBegin ++; } return res; } }
[leetcode]Spiral Matrix
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。