JS每日一题

1.将金额12345转成中文金额表示
要求
12345 => 一万两千三百四十五
10086 => 一万零八十六
100010001 => 一亿零一万零一
100000000 => 一亿
单位支持到亿

function numtostring(num) {
    let number=['零','一','二','三','四','五','六','七','八','九']
    let danwei=['','十','百','千','万','十','百','千','亿']
    result=''
    num=num+''
    l=num.length
    last=l-1
    for(let i=0;i<l;i++){
        if(num[i]!='0'){
            result=result+number[num[i]]+danwei[last]
        }else {
            if(num[i+1]!=0)
            result=result+'零'
        }
        last--
    }
    index=result.length-1
    if(result[index]=='零'){
        result=result.slice(0,index)
    }
    return result
}
console.log(numtostring(46000240))

2.leetcode55.跳跃游戏
用的贪心算法

var canJump = function(nums) {
    let Maxjump=nums.length-1;
    for(let i=nums.length-2;i>=0;i++){
        if(i+nums[i]>=Maxjump){
            Maxjump=i;
        }
    }
   return Maxjump===0;
};

3.leetcode56. 合并区间

var merge = function(intervals) {
    if(intervals.length<2){
        return intervals;
    }
    let result=[];
    intervals.sort((a,b)=>a[0]-b[0]);
    let cur=intervals[0];
    for(let i=1;i<intervals.length;i++){
        if(intervals[i][0]<=cur[1]){
            cur[1]=Math.max(cur[1],intervals[i][1]);
        }else{
            result.push(cur);
            cur=intervals[i];
        }
    }
    result.push(cur);
    return result;

};

3.509. 斐波那契数
top-down解法:

var fib = function(N) {
    if(N<=1){
        return N;
    }
    let cache=[];
    cache[0]=0;
    cache[1]=1;
    function memoize(num){
        if(cache[num]!==undefined){
            return cache[num];
        }
        else{
            cache[num]=memoize(num-1)+memoize(num-2);
            return cache[num];
        }
    }
    let result=memoize(N);
    return result;

};

bottom-up解法:

var fib = function(N) {
    if(N<=1){
        return N;
    }
    let cache=[];
    cache[0]=0;
    cache[1]=1;
    for(let i=2;i<=N;i++){
        cache[i]=cache[i-1]+cache[i-2];
    }
    return cache[N];

};

时间复杂度:O(N)
空间复杂度:O(1)

function fb3(n) {
     let num1 = 1,
         num2 = 2,
         num3 = 0;
     if (n < 1)
         return -1;
     if (n == 1 || n == 2)
         return 1;
     for (let i = 3; i < n; i++) {
         num3 = num1 + num2;
         num1 = num2;
         num2 = num3
     }
     return num3
 }

4.704. 二分查找

var search = function(nums, target) {
    let left=0;
    let right=nums.length-1;
    let mid=left+Math.floor((right-left)/2);
    while(left<=right){
        if(nums[mid]==target){
            return mid;
        }else{
            if(target>nums[mid]){
                left=mid+1;
                mid=left+Math.floor((right-left)/2);
            }else{
                right=mid-1;
                mid=left+Math.floor((right-left)/2);
            }
        }
    }
    return -1;

};

5.剑指 Offer 55 - I. 二叉树的深度
var maxDepth = function(root) {
if(!root){return 0}
else{
let left=maxDepth(root.left);
let right=maxDepth(root.right);
return ((left>right)?left:right)+1
}
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值