2021/10/8 刷题Day2

题目一 第N个泰波纳契数列

<script>
  var tribonacci = function(n) {
    //1.递归,超出时间限制
    // if(n===0){
    //   return 0;
    // }else if(n===1 || n===2){
    //   return 1;
    // }else{
    //   return tribonacci(n-1)+tribonacci(n-2)+tribonacci(n-3);
    // }

    //2. 动态
    if(n===0){
      return 0;
    }else if(n===1 || n===2){
      return 1;
    }else{
      let n_3 = 0, n_2=1,n_1=1,temp;
      for(let i=3;i<=n;i++){
        temp = n_1+n_2+n_3;

        n_3 = n_2;
        n_2 = n_1;
        n_1 = temp;
      }
      return temp;
    }
  };
  console.log(tribonacci(36));
</script>

题目二 爬楼梯

<script>
  //除了第一个和第二个台阶,从第三个开始,去考虑差距为1的或为2的台阶。从那些台阶上获得路径,然后+1/+2就是自己的路径
  //就是斐波那契数列的解法
  var climbStairs = function(n) {
    if(n === 1){
      return 1;
    }else if(n===2){
      return 2;
    }else {
      let n_2 = 1 , n_1 = 2, temp;
      for(let i=3;i<=n;i++){
        temp = n_2 + n_1;
        n_2 = n_1;
        n_1 = temp;
      }
      return temp;
    }
  };
  console.log(climbStairs(3));
</script>

题目三 重复的DNA序列

<script>
  //找出字符中长度为10的字符串。且该字符串出现超过一次
  //使用map,
  let s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT";
  var findRepeatedDnaSequences = function(s) {
      let count = s.length-10+1;  //可以数出的长度为10的字符串
      let map = new Map();

    //console.log(count);
    for(let i=0;i<count;i++){  //切割字符串,切出count个,放入map
        let str = s.slice(i,i+10); //包括头不包括尾
        //console.log(str);
        if(map.has(str)){
            map.set(str,map.get(str)+1);
        }else {
            map.set(str,1);
        }
    }
    let result = [];
    for(let m of map){
        if(m[1] > 1){
            result.push(m[0]);
        }
    }
    return result;
  };
  console.log(findRepeatedDnaSequences(s));
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值