1. 程式人生 > 實用技巧 >劍指09.變態跳臺階

劍指09.變態跳臺階

題目描述

一隻青蛙一次可以跳上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);*/ } }