Leetcode--5274. 停在原地的方案数
有一個(gè)長(zhǎng)度為?arrLen?的數(shù)組,開始有一個(gè)指針在索引?0 處。
每一步操作中,你可以將指針向左或向右移動(dòng) 1 步,或者停在原地(指針不能被移動(dòng)到數(shù)組范圍外)。
給你兩個(gè)整數(shù)?steps 和?arrLen ,請(qǐng)你計(jì)算并返回:在恰好執(zhí)行?steps?次操作以后,指針仍然指向索引?0 處的方案數(shù)。
由于答案可能會(huì)很大,請(qǐng)返回方案數(shù) 模?10^9 + 7 后的結(jié)果。
?
示例 1:
輸入:steps = 3, arrLen = 2
輸出:4
解釋:3 步后,總共有 4 種不同的方法可以停在索引 0 處。
向右,向左,不動(dòng)
不動(dòng),向右,向左
向右,不動(dòng),向左
不動(dòng),不動(dòng),不動(dòng)
示例??2:
輸入:steps = 2, arrLen = 4
輸出:2
解釋:2 步后,總共有 2 種不同的方法可以停在索引 0 處。
向右,向左
不動(dòng),不動(dòng)
示例 3:
輸入:steps = 4, arrLen = 2
輸出:8
?
提示:
1 <= steps <= 500
1 <= arrLen?<= 10^6
思路:動(dòng)態(tài)規(guī)劃
x表示當(dāng)前允許走的步數(shù),pos表示當(dāng)前所處的位置
dp(x,pos)的值只能由三種方法得到,左邊那個(gè)位置右移一步,右邊那個(gè)位置左移一步,當(dāng)前點(diǎn)不動(dòng)一下
dp(x,pos)=dp(x?1,pos?1)+dp(x?1,pos)+dp(x?1,pos+1)
提交的代碼:
class?Solution?{
????public?int?numWays(int?steps,?int?arrLen)?{
????????int?i,j;
??????int?MOD?=?1000000007;
????????????int?dp[][]?=?new?int[steps+1][steps+1];?
/*為什么列長(zhǎng)還是steps+1,題上有一個(gè)案例的位置給的特別長(zhǎng),會(huì)超出內(nèi)存限制,? 但其實(shí)想一下,最遠(yuǎn)的距離不就是你能走的步數(shù)總長(zhǎng)嗎,總共讓你走10步,還能跑到20位置嗎?不可能的*/
????????????dp[0][0]=1;
????????????for(i=1;i<=steps;i++)
????????????{
????????????????for(j=0;j<=Math.min(i,arrLen-1);j++)
????????????????{
????????????????????dp[i][j]+=dp[i-1][j];
????????????????????if(j>0)
????????????????????{
????????????????????????dp[i][j]+=dp[i-1][j-1];
????????????????????????dp[i][j]%=MOD;
????????????????????}
????????????????????if(j<Math.min(i,arrLen-1))
????????????????????{
????????????????????????dp[i][j]+=dp[i-1][j+1];
????????????????????????dp[i][j]%=MOD;
????????????????????}
????????????????}
????????????}
????????????return?dp[steps][0];
????}
}
總結(jié)
以上是生活随笔為你收集整理的Leetcode--5274. 停在原地的方案数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【剑指offer】面试题42:连续子数组
- 下一篇: Leetcode--289. 生命游戏