题目给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:0 <= j <= nums[i] i + j < n返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。 示例 1:输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4] 输出: 2思路每次跳跃的时候,都跳到最远的位置,一直跳到最后位置。这样的跳跃次数肯定是最少的。代码class Solution { public: int jump(vector<int>& nums) { //end每次跳的最远位置,初始值为0. //maxPos记
题目给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。 示例 1:输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。思路遍历数组,看每一位跳的最远的地方在哪里。如果数组里不含有0,则肯定能够到达最后一个下标。当数组中间某个位置是0,并且从开始往后跳,最远只能到达这个0位置,则是不能到达最后一个下标的。所以遍历数组,看最远能够到达的位置,是否能到最后一个下标即可。代码class Solution { public: bool canJump(vector<int>& nums) { int right = 0;//一开始最远到达的位置为0 for(
题目给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "*"输出: true解释: '*' 可以匹配任意字符串。示例 3:输入:s = "cb"p = "?a"输出: false解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。示例 4:输入:s = "adceb"p = "ab"输出: true解释: 第一个 '' 可以匹配空字符串, 第二个 '' 可以匹配字符串 "dce".示例 5:输入:s = "acdcb"p = "a*c?b"输出: false思路当模式串不含有星号时,直接从第一位开始,一个字符一个字符匹配。当模式串含有一个星号时,这
题目给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:height = [1,1]输出:1思路两条垂线和x轴组成一个容器,这个容器的面积决定了盛水量。面积越大,盛水量越多。每两条垂线组合,就是一个容器面积。比较所有的垂线组合,取面积最大值就是答案。首先取开头和末尾的两条垂线。假设开头为i,末尾为j。此时容器的面积取决于高度较小的垂线。假设高度较小的垂线为i,那么容器面积就是height[i]*(j-i)。而此时,i垂线和j左侧所有垂线组成的容器,其面积都比(i,j)组成的容器面积小。因为(j-i)变小了。而容器高度不变,或者也变小了。因为j左侧所有垂线要么比j高,要么比j低,要么和
题目给你一个大小为 m x n 的网格和一个球。球的起始坐标为 [startRow, startColumn] 。你可以将球移到在四个方向上相邻的单元格内(可以穿过网格边界到达网格之外)。你 最多 可以移动 maxMove 次球。给你五个整数 m、n、maxMove、startRow 以及 startColumn ,找出并返回可以将球移出边界的路径数量。因为答案可能非常大,返回对 109 + 7 取余 后的结果。提示:1 <= m, n <= 50 0 <= maxMove <= 50 0 <= startRow < m 0 <= startColumn < n思路定义dp[i][j][k]表示坐标(i,j),最多移动k次,出界的路径数。当k位于最中间,k<i,k<j,k<m-i,k<n-j。时,怎么都无法出界。直接返回0。状态转移方程为:dp[i][j][k] += dp[i+x][j+y][k-1],x=0、1或-1,y=0、1或-1。代码class Solution { vector<vecto