跳臺階與變態跳臺階解法(Java實現)
這兩道題博主都是用的數學歸納法。
首先
一.跳臺階
題目敘述:一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
情況:
1階:跳1次
2階:跳2次
3階:跳3次
4階:跳5次
5階:跳8次
6階:跳13次
7階:跳21次
1,2,3,5,8,13,21····
從次數可以看出是一種數列,那就是斐波那契數列,規律是第n+1項等於n項 +(n-1)項:
關於斐波那契數列的解釋:
因此此題變成求從1開始,斐波那契數列的第n項是什麼?
public class Solution { public int JumpFloor(int target) { if (target == 0) { return 0; } int[] a = new int[target + 2];//加2是因為必須加到target本身,因此+1,又因為從i-1=0(i=1)開始迴圈,需要陣列a[0]再裝下一個0,因此再+1。 a[0] = 0; a[1] = 1; for (int i = 1; i < target + 1; i++) { a[i + 1] = a[i] + a[i - 1]; } return a[target + 1]; } }
二.變態跳臺階
這個題如果程式不長,不過需要理解它的原理:
情況:
數學歸納法
1階:1種
2階:2種
3階:4種
4階:8種
5階:16種
再往下就是一直第n階級,到
或者用推理的方式:
首先直接看3階的:3階有4種情況。3階對應4種情況=》3J=4Q
那跳4階的時候:a情況:第0階到第3階(3階的情況)有4種,最後跳1個階跳到第4階,
b情況:第0階跳1個階先跳到第1階,第1階到第4階(3階的情況)有4種。
a與b中,因為第3階到第4階只增加1階。
所以a情況中,前3階中的4種情況中的一種是 每次只跳1階
4階:
4+4=8
8-1=7種
但是再算上從0階直接跳到4階的一種,又為8種。
4階到5階也是一樣:4階為8種
5階中的前4階加最後1階為a1情況,5階第1階加後4階為b1情況
5階:
8+8=16
16-1=15//減一為a1與b1中重複計算了一次每次只跳1階的情況
15+1=16//加一為全階一次跳完的情況
這樣往後推就能知道
每次增加1個臺階,之前的情況都會翻倍
這樣就能得到等比數列的通項公式 = :=1,q=2
通項公式出來了。程式也就很簡單了
public class Solution {
public int JumpFloorII(int target) {
return 1<<target-1;//根據等比通項公式 a1*q^(n-1)
}
}
畫圖辛苦,點個贊吧!