题目

假如你在爬楼梯,楼梯一共有N层,但你每次爬楼梯只能走一步或两步或三步,计算共有多少种走法?如何输出具体的走法呢? 斐波那契数列,又叫兔子数列 百度百科

第一问

  1. /**
  2. * @param {number} n
  3. * @return {number}
  4. */
  5. // n=0 return 0
  6. // n=1 return 1
  7. // n=2 return 2
  8. // n=3 return 4
  9. // n=4 return 7
  10. // n=5 return 13
  11. // n=6 return 24
  12. //前三项之和
  13. var climbStairs = function(n) {
  14. const dp = [];
  15. dp[0] = 0;
  16. dp[1] = 1;
  17. dp[2] = 2;
  18. dp[3] = 4;
  19. //从第二个开始
  20. for(let i = 4; i <= n; i++) {
  21. dp[i] = dp[i - 1] + dp[i - 2]+ dp[i - 3];
  22. }
  23. return dp[n];
  24. };

第二问

网上找了个java版本的,改造成了js版本。
在线实例:http://js.jsrun.net/VUNKp/edit

  1. //js栈的实现
  2. class stack {
  3. constructor() {
  4. this.dataStore = [];//保存栈内元素,初始化为一个空数组
  5. this.top = 0;//栈顶位置,初始化为0
  6. }
  7. // 入栈
  8. push(element) {
  9. this.dataStore[this.top++] = element;
  10. }
  11. // 出栈
  12. pop() {
  13. return this.dataStore[--this.top];
  14. }
  15. // 查看栈顶元素
  16. peek() {
  17. return this.dataStore[this.top - 1];
  18. }
  19. // 清空
  20. clear() {
  21. this.top = 0;
  22. }
  23. // 长度
  24. length() {
  25. return this.top;
  26. }
  27. }
  28. var setVal = new stack();
  29. buileT(setVal, 2);
  30. function buileT(setVal, n) {
  31. if (n >= 1) {
  32. setVal.push(1);
  33. buileT(setVal, n - 1);
  34. setVal.pop();
  35. }
  36. if (n >= 2) {
  37. setVal.push(2);
  38. buileT(setVal, n - 2);
  39. setVal.pop();
  40. }
  41. if (n >= 3) {
  42. setVal.push(3);
  43. buileT(setVal, n - 3);
  44. setVal.pop();
  45. }
  46. if (n == 0) {
  47. console.log(setVal.dataStore)
  48. }
  49. }