劍指09.變態跳臺階
阿新 • • 發佈:2020-08-07
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。分析
【分析1】如果上一步跳 1 步到達第 n 個臺階,說明上一步在第 n-1 個臺階。已知跳到第n-1個臺階的方法數為f[n-1]
如果上一步跳 2 步到達第 n 個臺階,說明上一步在第 n-2 個臺階。已知跳到第n-2個臺階的方法數為f[n-2]
。。。
如果上一步跳 n 步到達第 n 個臺階,說明上一步在第 0 個臺階。已知跳到 第0個臺階的方法數為f[0]
兩式相減得,
因此,可以直接用遞迴計算。
【分析2】進一步分析,每個臺階可以看作一塊木板,讓青蛙跳上去,n個臺階就有n塊木板,最後一塊木板是青蛙到達的位子, 必須存在,其他 (n-1) 塊木板可以任意選擇是否存在,則每個木板有存在和不存在兩種選擇,(n-1) 塊木板 就有 [2^(n-1)] 種跳法,可以直接得到結果。
解法
import java.lang.Math; public class Solution { public int JumpFloorII(int target) { if (target < 1) return 0; return 1 << (target - 1); // 口訣:左移乘2,右移除2 num << n 表示二進位制左移n位,結果相當於 num * (2的n次方) //return (int)Math.pow(2, target - 1); //注意方法pow()返回的結果為double型!!需要手動轉成int型。// 遞迴實現 /*if (target == 1) return 1; return 2 * JumpFloorII(target - 1);*/ } }