首页 > 其他分享 >leetcode简单:[66, 67, 70, 83, 121, 141, 160, 169, ,206, 338]

leetcode简单:[66, 67, 70, 83, 121, 141, 160, 169, ,206, 338]

时间:2023-01-09 19:36:10浏览次数:52  
标签:digits function head curr 338 141 206 next var

目录

66. 加一

var plusOne = function(digits) {
    // 1. 从最后一个值进行开始遍历
    // 2. 只要是%10===0,就直接继续遍历,否则返回值即可
    // 3. 最后,遍历完还没给出结果的,那肯定是 10,这种所以要往前加1
    for (let i = digits.length - 1; i >= 0; i--) {
        digits[i] = digits[i] + 1
        digits[i] = digits[i] % 10
        if (digits[i] !== 0) {
            return digits
        }
    }
    digits.unshift(1)
    return digits
};

67. 二进制求和

var addBinary = function(a, b) {
    var len = Math.max(a.length, b.length)
    a = a.padStart(len, 0).split('')
    b = b.padStart(len, 0).split('')

    var result = []
    var isTen = 0
    for (let i = len - 1; i >= 0; i--) {
        var tmpA = parseInt(a[i])
        var tmpB = parseInt(b[i])
        if (tmpA + tmpB + isTen == 3) { // 1+1+1
            result.unshift(1);
            isTen = 1
        } else if (tmpA + tmpB + isTen == 2) { // 1+1+0
            result.unshift(0);
            isTen = 1
        } else if (tmpA + tmpB + isTen == 1) { // 1+0+0
            result.unshift(1);
            isTen = 0
        } else { // 0+0+0
            result.unshift(0);
            isTen = 0
        }
    }
    if (isTen == 1) result.unshift(1);
    return result.join('')
};

70. 爬楼梯

var climbStairs = function(n) {
    const path = []
    //  path[n] = path[n-1] + path[n-2]   // 最终到达顶的总数 =  差一步 + 差两步的 和

    // 已知条件
    path[1] = 1
    path[2] = 2
    for (i = 3; i <= n; i++) {
        path[i] = path[i - 1] + path[i - 2]
    }
    return path[n]
};

83. 删除排序链表中的重复元素

var deleteDuplicates = function(head) {
    let curr = head
    while (curr !== null && curr.next !== null) {
        if (curr.val == curr.next.val) {
            curr.next = curr.next.next
        } else {
            curr = curr.next
        }
    }
    return head

};

121. 买卖股票的最佳时机

var maxProfit = function(prices) {
    var minPrice = prices[0]
    var maxProfit = 0
    for (let i = 0; i < prices.length; i++) {
        minPrice = prices[i] < minPrice ? prices[i] : minPrice
        maxProfit = prices[i] - minPrice < maxProfit ? maxProfit : prices[i] - minPrice

    }
    return maxProfit
};

141. 环形链表

var hasCycle = function(head) {
    // 使用快慢指针
    var fast = head;
    while (fast && fast.next) {
        head = head.next
        fast = fast.next.next
        if (head === fast) return true
    }
    return false
};

160. 相交链表

var getIntersectionNode = function(headA, headB) {
    var n1 = headA
    var n2 = headB

    while (n1 !== n2) {
        if (n1 === null) {
            n1 = headB
        } else {
            n1 = n1.next
        }
        if (n2 === null) {
            n2 = headA
        } else {
            n2 = n2.next
        }
    }
    return n1
};

169. 多数元素

var majorityElement = function(nums) {
    var keyMap = {}
    for (let i = 0; i < nums.length; i++) {
        if (!keyMap[nums[i]]) {
            keyMap[nums[i]] = 0
        }
        keyMap[nums[i]]++
    }
    var res = []
    for (const key in keyMap) {
        if (keyMap[key] > (nums.length / 2)) {
            res.push(key)
        }
    }
    return res
}

206. 反转链表

var reverseList = function(head) {
    var prev = null
    var curr = head
    var next = head
    while (curr !== null) {
        // next = curr.next // 由于是单项链表,所以需要占位
        // curr.next = prev // 实现反转
        // prev = curr
        // curr = next
        // 上述四步可简写为:
        [curr.next, prev, curr] = [prev, curr, curr.next]
    }
    return prev
};

338. 比特位计数

var countBits = function(n) {
    var res = []
    for (let i = 0; i <= n; i++) {
        var bin = i.toString(2)
        var tmp = bin.replace(/1/g, '').length
        res.push(bin.length - tmp)
    }
    return res
};

标签:digits,function,head,curr,338,141,206,next,var
From: https://www.cnblogs.com/echoyya/p/17038332.html

相关文章

  • Educational Codeforces Round 141 (Rated for Div. 2) A-C题解
    比赛链接A、MakeitBeautiful一种构造方法:按照从大到小的顺序构造,可以发现前缀和永远大于当前值。但是需要特判存在两个最大值的情况。只需要将最小值与第二位交换位置......
  • CF--edu141--D
    关键DP,直接枚举当前这个位置的数可能的值,然后就可以递推出下一个位置可能的值,直接相加或者减去就可以了。因为当前的这个值可能是负数,所以需要加上一个偏移PS:其实我又......
  • Educational Codeforces Round 141
    A.MakeitBeautiful他想要变美,我们按照题目说的做就行,通过判断我们发现如果在sort一遍后sort(a+1,a+1+n);if(a[1]==a[n]){cout<<"NO"<<"\n";......
  • P1141 01迷宫
    这题数据有点高级啊(这么高级的数据能不能把它变成黄题呢?不然显得我很垃圾(虽然是事实))思路联通块,把周围四格与自己不同的联通起来,看成一个大块,知道要的坐标属于哪个大块并......
  • LeetCode338
    题目链接:https://leetcode.cn/problems/counting-bits/。这道题虽然带有动态规划的tag,但是只有一个维度的规划很适合刚接触这个概念的新人。动态规划比较关键的一点是把......
  • NC20684 wpy的请求
    题目链接题目题目描述“题目名称只是吸引你来做题的啦,其实和题目没什么卵关系:o(* ̄▽ ̄*)o”——历史——殿堂wpy移情别恋啦,他不喜欢spfa了,现在他喜欢使用dij,但是他又发......
  • leetcode-206-easy
    ReverseLinkedListGiventheheadofasinglylinkedlist,reversethelist,andreturnthereversedlist.Example1:Input:head=[1,2,3,4,5]Output:[5,......
  • 206. 反转链表
    题目链接https://leetcode.cn/problems/reverse-linked-list/description/解题思路按照我们解递归的一般思路,首先确定参数和返回值。从题意可以看出,参数是给定一个链表......
  • 【链表】LeetCode 141. 环形链表
    题目链接141.环形链表思路设置fast指针和slow指针,分别走两步和一步,如果链表有环的话,那么两个指针一定会在某一时刻相遇。可以想象成速度不同的两个人跑圈,只要时间足够......
  • CF1416D Graph and Queries
    CF1416DGraphandQueries看到这题第一眼就想到时光倒流,但是操作一只能顺序做,这就很困惑了。但是一个比较好的性质是操作一只会改变点值,操作二只会改变图的形态,启发我们......