首页 > 编程语言 > javascript-代码随想录训练营day25

javascript-代码随想录训练营day25

时间:2022-12-11 10:22:05浏览次数:89  
标签:return 数字 day25 res javascript 随想录 let path backtracking

216.组合总和Ⅲ

题目链接:

https://leetcode.cn/problems/combination-sum-iii/

题目描述:

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

输入: k = 3, n = 7
输出: [[1,2,4]]
解释:
1 + 2 + 4 = 7
没有其他符合的组合了。

思路:

使用递归回溯的方法,从小到大依次选取数字,将问题转化为选取当前数字+在剩余数字中选取的子问题。终止条件为选取的数字数量为k,递归函数的参数是当前能选取的最小数字,每层递归中选取

当前能选取的最小数字并处理子问题后将选取的数字清除。

代码:

var combinationSum3 = function(k, n) {
    let res = []
    let path = []
    function sum(arr) {
        let s = 0;
        for (let i=arr.length-1; i>=0; i--) {
            s += arr[i];
        }
        return s;
    }
    function backtracking(start){
        if(path.length === k){
            if(sum(path) === n){
                res.push([...path])
            }
            return
        }
        else{
            for(let j = start; j < 10; j++){
                path.push(j)
                backtracking(j + 1)
                path.pop()
            }
        }
    }
    for(let i = 1; i < 10; i++){
        path.push(i)
        backtracking(i + 1)
        path.pop()
    }
    return res
};

17.电话号码的字母组合

题目链接:

https://leetcode.cn/problems/letter-combinations-of-a-phone-number/

题目描述:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

image-20221211095236809

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

思路:

最直观的想法就是遍历题目给出的数字,多层循环嵌套得出结果。但是组合问题的for循环数往往不确定,很难直接写出。可以使用回溯的方法进行代替,将问题一步一步地解决。由于1回溯法之前提到过很多次,这里就不再赘述了。

本题的输入是数字,要求我们把数字对应的字母写出,这就涉及到一个对应问题了,我使用数组来对应数字与字母。

代码:

var letterCombinations = function(digits) {
    let res = []
    let path = []
    let dic = [
        '',
        '',
        ['a','b','c'],
        ['d','e','f'],
        ['g','h','i'],
        ['j','k','l'],
        ['m','n','o'],
        ['p','q','r','s'],
        ['t','u','v'],
        ['w','x','y','z']
    ]
    function backtracking(indexOfDigits){
        if(indexOfDigits === digits.length){
            res.push(path.join(''))
            return
        }
        dic[digits.at(indexOfDigits)].forEach((i)=>{
            path.push(i)
            backtracking(indexOfDigits + 1)
            path.pop()
        })
    }
    if(!digits) return []
    backtracking(0)
    return res
};

标签:return,数字,day25,res,javascript,随想录,let,path,backtracking
From: https://www.cnblogs.com/endmax/p/16972890.html

相关文章

  • JavaScript奇淫技巧:隐写术
    JavaScript奇淫技巧:隐写术本文将用JavaScript实现“图片隐写术”。什么是隐写术?将文本或其它数据写入图片的技术,称为“隐写术”。比如下面这张图中,便隐藏着秘密信息,虽然看起......
  • 代码随想录训练营第六十天 | 单调栈
    今天是代码随想录训练营的第六十天,是最后一天,也代表这一刷结束 84.柱状图中最大的矩形classSolution{publicintlargestRectangleArea(int[]heights){......
  • JavaScript:this指针
    this指针,存储的是一个内存地址,如同变量一样,指向一块内存区域;而这个内存区域,保存的就是一个对象的数据,那么这个对象是什么呢?通常来说,this指针,主要是用在方法(函数)中,用来指......
  • 深入解析 JavaScript 中 apply 方法原理
    前言大家好,我是 CoderBin,在面试当中,手撕代码的场景屡见不鲜,手写JS当中的方法更是最常见的一种,所以本文将全面的,详细解析​​apply​​方法的实现原理,并手写出自己的​​a......
  • 前端开发系列023-基础篇之JavaScript和JSON(扩展)
    title:'前端开发系列023-基础篇之JavaScript和JSON(扩展)'tags:-javaScript系列categories:[]date:2017-06-2008:20:13本文输出JSON搜索和JSON转换相关的内容......
  • 前端开发系列022-基础篇之JavaScript和JSON(进阶)
    title:'前端开发系列022-基础篇之JavaScript和JSON(进阶)'tags:-javaScript系列categories:[]date:2017-06-1908:20:13在[javaScript和JSON](http://wendingd......
  • 前端开发系列030-基础篇之JavaScript函数基本
    title:'前端开发系列030-基础篇之JavaScript函数基本'tags:-javaScript系列categories:[]date:2017-08-1122:05:13一、函数的创建和结构函数的定义:函数是Jav......
  • 代码随想录训练营第五十八章|单调栈
    今天是训练营第五十八天,是最后一天单调栈的开始  739.每日温度 classSolution{publicint[]dailyTemperatures(int[]temperatures){intn......
  • 代码随想录训练营第五十九天| 单调栈
     今天是第五十九天,有经典的接雨水问题 ●  503.下一个更大元素II classSolution{publicint[]nextGreaterElements(int[]nums){if(nums==......
  • javascript:微信扫一扫下载android应用的引导页
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><bodystyle="padding:0px;margin:0px;"><!--background--><divsty......