48期问题及答案
旋转图像
题目描述:
给定一个 n x n
的二维矩阵表示一个图像,将图像顺时针旋转 90 度。
说明:
你必须在原地旋转图像,不能直接使用另一个矩阵来旋转图像。
示例 1:
输入:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
输出:
[
[7, 4, 1],
[8, 5, 2],
[9, 6, 3]
]
示例 2:
输入:
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
]
输出:
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]
注意:
这里要求必须在原地修改输入矩阵,即不可以新建一个矩阵来存储结果,需要直接修改给定的二维矩阵。
以下是使用 TypeScript 实现的解答:
function rotate(matrix: number[][]): void {
const n = matrix.length;
// 水平翻转
for (let i = 0; i < Math.floor(n / 2); i++) {
for (let j = 0; j < n; j++) {
[matrix[i][j], matrix[n - 1 - i][j]] = [matrix[n - 1 - i][j], matrix[i][j]];
}
}
// 对角线翻转
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) {
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
}
}
}
解题思路:
旋转图像的操作可以分解为两个步骤:先进行水平翻转,再进行对角线翻转。
水平翻转即将第一行与最后一行交换,第二行与倒数第二行交换,依次类推。
对角线翻转即将矩阵的每个元素沿对角线互换位置,即
matrix[i][j]
与matrix[j][i]
交换。
时间复杂度分析:
对角线翻转和水平翻转各需要遍历矩阵一次,所以总的时间复杂度为 O(n^2),其中 n 是矩阵的大小。
空间复杂度分析:
使用了常数个额外变量,空间复杂度为 O(1)。
49期
爬楼梯算法解答
题目描述:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意: 给定 n
是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1 阶 + 1 阶
2 阶
示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1 阶 + 1 阶 + 1 阶
1 阶 + 2 阶
2 阶 + 1 阶
上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。
学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。