题目
假如你在爬楼梯,楼梯一共有N层,但你每次爬楼梯只能走一步或两步或三步,计算共有多少种走法?如何输出具体的走法呢? 斐波那契数列,又叫兔子数列 百度百科
第一问
/*** @param {number} n* @return {number}*/// n=0 return 0// n=1 return 1// n=2 return 2// n=3 return 4// n=4 return 7// n=5 return 13// n=6 return 24//前三项之和var climbStairs = function(n) {const dp = [];dp[0] = 0;dp[1] = 1;dp[2] = 2;dp[3] = 4;//从第二个开始for(let i = 4; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2]+ dp[i - 3];}return dp[n];};
第二问
网上找了个java版本的,改造成了js版本。
在线实例:http://js.jsrun.net/VUNKp/edit
//js栈的实现class stack {constructor() {this.dataStore = [];//保存栈内元素,初始化为一个空数组this.top = 0;//栈顶位置,初始化为0}// 入栈push(element) {this.dataStore[this.top++] = element;}// 出栈pop() {return this.dataStore[--this.top];}// 查看栈顶元素peek() {return this.dataStore[this.top - 1];}// 清空clear() {this.top = 0;}// 长度length() {return this.top;}}var setVal = new stack();buileT(setVal, 2);function buileT(setVal, n) {if (n >= 1) {setVal.push(1);buileT(setVal, n - 1);setVal.pop();}if (n >= 2) {setVal.push(2);buileT(setVal, n - 2);setVal.pop();}if (n >= 3) {setVal.push(3);buileT(setVal, n - 3);setVal.pop();}if (n == 0) {console.log(setVal.dataStore)}}
