49. 算法-爬楼梯

文章介绍了如何在原地旋转一个nxn矩阵,通过TypeScript代码展示了先水平翻转再对角线翻转的解法,时间复杂度为O(n^2),空间复杂度为O(1)。此外,还提出了爬楼梯问题,探讨了不同方法到达楼顶的计数问题。
摘要由CSDN通过智能技术生成

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 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意: 给定 n 是一个正整数。

示例 1:

输入: 2输出: 2解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶

  2. 2 阶

示例 2:

输入: 3输出: 3解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶

  2. 1 阶 + 2 阶

  3. 2 阶 + 1 阶

上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值