LCR 130. 衣橱整理
家居整理师将待整理衣橱划分为 m x n 的二维矩阵 grid,其中 grid[i][j] 代表一个需要整理的格子。整理师自 grid[0][0] 开始 逐行逐列 地整理每个格子。
整理规则为:在整理过程中,可以选择 向右移动一格 或 向下移动一格,但不能移动到衣柜之外。同时,不需要整理 digit(i) + digit(j) > cnt 的格子,其中 digit(x) 表示数字 x 的各数位之和。
请返回整理师 总共需要整理多少个格子。
示例 1:
**输入:**m = 4, n = 7, cnt = 5
**输出:**18
提示:
1 <= n, m <= 100
0 <= cnt <= 20
整理规则是只能向右或向下移动,所以假如 i,j 不需整理,则不再考虑 i+1,j 和i,j+1
我们可以使用dfs或bfs,对可移动到的每个格子进行判断
BFS
123456789101112131415161718192021222324252627282930313233class Solution {public: int wardrobe ...
LCR 129. 字母迷宫
字母迷宫游戏初始界面记作 m x n 二维字符串数组 grid,请判断玩家是否能在 grid 中找到目标单词 target。
注意:寻找单词时 必须 按照字母顺序,通过水平或垂直方向相邻的单元格内的字母构成,同时,同一个单元格内的字母 不允许被重复使用 。
示例 1:
**输入:**grid = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], target = “ABCCED”
**输出:**true
示例 2:
**输入:**grid = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], target = “SEE”
**输出:**true
示例 3:
**输入:**grid = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], target = “ABCB”
**输出:**false
提示:
m == grid.length
n = grid[i].length
1 <= m, n ...
LCR 128. 库存管理 I
仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。原库存表按商品 id 升序排列。现因突发情况需要进行商品紧急调拨,管理员将这批商品 id 提前依次整理至库存表最后。请你找到并返回库存表中编号的 最小的元素 以便及时记录本次调拨。
示例 1:
**输入:**stock = [4,5,8,3,4]
**输出:**3
示例 2:
**输入:**stock = [5,7,9,1,2]
**输出:**1
提示:
1 <= stock.length <= 5000
-5000 <= stock[i] <= 5000
已排序数组,寻找旋转点;
题目需要最小的元素,将数组从旋转点分为左右两部分,右部分元素小于左部分任何一个元素,可知最小值一定在右部分存在(没有旋转默认为右部分)
所以考虑比较stock[mid]与stock[right]
stock[mid]>stock[right]:mid处于左部分
stock[mid]<stock[right]:mid处于右部分
stock[mid]==stock[right]: ...
LCR 127. 跳跃训练
今天的有氧运动训练内容是在一个长条形的平台上跳跃。平台有 num 个小格子,每次可以选择跳 一个格子 或者 两个格子。请返回在训练过程中,学员们共有多少种不同的跳跃方式。
结果可能过大,因此结果需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
**输入:**n = 2
**输出:**2
示例 2:
**输入:**n = 5
**输出:**8
提示:
0 <= n <= 100
动态规划,当前状态只与前两个状态有关,所以可以只保留两个状态
sum 表示状态i,a表示状态i-2,b表示状态i-1
设a=1,b=1,直接从dp[2]开始计算,计算num次dp[num+1]计算结束,a更新为dp[num],b更新为dp[num+1]
最后返回a即可
1234567891011121314class Solution {public: int trainWays(int num) { int mod = 1000000007; int a = 1, b = 1, sum ...
LCR 126. 斐波那契数
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。
答案需要取模 1e9+7(1000000007) ,如计算初始结果为:1000000008,请返回 1。
示例 1:
**输入:**n = 2
**输出:**1
**解释:**F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
**输入:**n = 3
**输出:**2
**解释:**F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
**输入:**n = 4
**输出:**3
**解释:**F(4) = F(3) + F(2) = 2 + 1 = 3
提示:
0 <= n <= 100
F(n) = F(n - 1) + F(n - 2)动态规划
因为F(n)只与F(n-1),F(n-2)有关所以3个变量就够了a,b,sum
1234567 ...
LCR 125. 图书整理 II
读者来到图书馆排队借还书,图书管理员使用两个书车来完成整理借还书的任务。书车中的书从下往上叠加存放,图书管理员每次只能拿取书车顶部的书。排队的读者会有两种操作:
push(bookID):把借阅的书籍还到图书馆。
pop():从图书馆中借出书籍。
为了保持图书的顺序,图书管理员每次取出供读者借阅的书籍是 最早 归还到图书馆的书籍。你需要返回 每次读者借出书的值 。
如果没有归还的书可以取出,返回 -1 。
示例 1:
输入:
[“BookQueue”, “push”, “push”, “pop”]
[[], [1], [2], []]
输出:[null,null,null,1]
解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.pop(); // return 1, queue is [2]
提示:
1 <= bookID <= ...





