...
Code Block | ||
---|---|---|
| ||
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if (matrix.empty()) return {}; vector<int> res; int l = 0; //左边界 int r = matrix[0].size() - 1; //右边界 int t = 0; //上边界 int b = matrix.size() - 1; //下边界 while (true) { //left -> right for (int i = l; i <= r; i++) res.push_back(matrix[t][i]); if (++t > b) break; //top -> bottom for (int i = t; i <= b; i++) res.push_back(matrix[i][r]); if (--r < l) break; //right -> left for (int i = r; i >= l; i--) res.push_back(matrix[b][i]); if (--b < t) break; //bottom -> top for (int i = b; i >= t; i--) res.push_back(matrix[i][l]); if (++l > r) break; } return res; } }; |
Code Block | ||
---|---|---|
| ||
package main
import "fmt"
func printMatrix(matrix [][]int) {
var (
l = 0 // 左边界
r = len(matrix[0]) - 1 // 右边界
t = 0 // 上边界
b = len(matrix) - 1 // 下边界
)
for {
// 从左往右
for i := l; i <= r; i++ {
fmt.Println(matrix[t][i])
}
if t += 1; t > b {
break
}
// 从上到下
for i := t; i <= b; i++ {
fmt.Println(matrix[i][r])
}
if r -= 1; t < l {
break
}
// 从右往左
for i := r; i >= l; i-- {
fmt.Println(matrix[b][i])
}
if b -= 1; b < t {
break
}
// 从下往上
for i := b; i >= t; i-- {
fmt.Println(matrix[i][l])
}
if l += 1; l > r {
break
}
}
}
func main() {
var (
matrix = [][]int{
{1, 2, 3},
{8, 9, 4},
{7, 6, 5},
}
)
printMatrix(matrix)
} |