题目一 第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>