該題目爲跳臺階題目的延伸,普通跳臺階每次跳的階數(1或2),而該題目每次跳的階數進化爲(1~N),其實萬變不離其宗,看下圖:html
其實想法和普通跳臺階徹底一致,跳1級,剩下n-1級,則剩下跳法是f(n-1),跳2級,剩下n-2級,則剩下跳法是f(n-2),因此f(n)=f(n-1)+f(n-2)+...+f(1),由於f(n-1)=f(n-2)+f(n-3)+...+f(1),因此f(n)=2*f(n-1)。老實說,這裏有點繞,我表示不是很清楚,普通跳臺階解題思路點這裏。該題目也是遞歸與循環的基礎使用。spa
方法1:遞歸法code
class Solution { public int jumpFloorII(int n) { if(n < 0) { return -1; } else if(n == 0 || n == 1) { return 1; } else { return 2*jumpFloorII(n-1); } } }
方法2:循環法htm
class Solution { public int jumpFloorII(int n) { if (n<=2) return n; int result=0; int result1=1; int result2=2; for(int i=3;i<=n;i++) { result=result1+result2+1; result1=result1+result2; result2=result; } return result; } }