文章目录
- 励志
- 一、剑指 Offer 29. 顺时针打印矩阵
- 题:
- 解:
- 二、剑指 Offer 31. 栈的压入、弹出序列
- 题:
- 解:
励志
We’re gonna do this together.
让我们并肩作战。
一、剑指 Offer 29. 顺时针打印矩阵
题:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
解:
解题思路:距阵模拟
AC代码:
class Solution {
public int[] spiralOrder(int[][] matrix) {
int len = matrix.length;
if(len == 0) return new int[0];
int l = 0, r = matrix[0].length - 1, t = 0, b = len - 1;
int[] res = new int[(r + 1) * (b + 1)];
int x = 0;
while(true) {
for(int i = l; i <= r; i ++) res[x ++] = matrix[t][i]; // 左到右
if(++t > b) break; // 上边界下移动
for(int i = t; i <= b; i ++) res[x ++] = matrix[i][r]; // 上到下
if(--r < l) break; // 右边界左移动
for(int i = r; i >= l; i --) res[x ++] = matrix[b][i]; // 右到左
if(--b < t) break; // 下边界上移动
for(int i = b; i >= t; i --) res[x ++] = matrix[i][l]; // 下到上
if(++l > r) break; // 左边界右移动
}
return res;
}
}
- 时间复杂度 O(MN): M, N分别为矩阵行数和列数。
- 空间复杂度 O(1): 四个边界 l , r , t , b 使用常数大小的额外空间。
二、剑指 Offer 31. 栈的压入、弹出序列
题:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
示例 1:
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
示例 2:
输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。
提示:
0 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed 是 popped 的排列。
解:
解题思路:弹栈模拟
AC代码:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack = new Stack<>();
int i = 0; // pop指针
for(int num : pushed) { // 遍历push
stack.push(num);
// 模拟出栈
while(!stack.isEmpty() && stack.peek() == popped[i]) {
stack.pop();
i ++;
}
}
return stack.isEmpty();
}
}
- 时间复杂度 O(N): 其中 N为列表 pushed 的长度;每个元素最多入栈与出栈一次,即最多共 2N 次出入栈操作。
- 空间复杂度 O(N): 辅助栈 stack 最多同时存储 N个元素。