首页 > 其他分享 >代码随想录训练营第28天 | 93.复原IP地址、78.子集 、90.子集II

代码随想录训练营第28天 | 93.复原IP地址、78.子集 、90.子集II

时间:2024-06-04 23:13:19浏览次数:24  
标签:const nums 28 随想录 return startIndex 子集 path

93.复原IP地址

本期本来是很有难度的,不过 大家做完 分割回文串 之后,本题就容易很多了
题目链接/文章讲解:https://programmercarl.com/0093.复原IP地址.html
视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/

和分割字符串类似,还有判断当前数字是否符合要求
function isValid(str, start, end) {
    if (end - start === 0) {
        let num = Number(str[start]);
        if (num<0) {
            return false;
        }
        return true;
    } else {
        if (str[start] === '0') return false;
        let num = Number(str.slice(start, end+1));
        if (num>255) {
            return false;
        }
        return true;
    }
}
/**
 * @param {string} s
 * @return {string[]}
 */
var restoreIpAddresses = function(s) {
    const res = [];
    const path = [];
    const backtraversing = (str, startIndex) => {
        if (path.length>4) return;
        if (path.length === 4) {
            if (startIndex >= str.length) {
                res.push(path.join('.'))
            }
            return;
        }
        let len = startIndex+3 > str.length ? str.length : startIndex+3;
        for (let i=startIndex; i<len; i++) {
            if (isValid(str, startIndex, i)) {
                path.push(str.slice(startIndex, i+1));
                backtraversing(str, i+1);
                path.pop();
            } else {
                continue;
            }
        }
    }
    backtraversing(s, 0);
    return res;
};

78.子集

子集问题,就是收集树形结构中,每一个节点的结果。 整体代码其实和 回溯模板都是差不多的。
题目链接/文章讲解:https://programmercarl.com/0078.子集.html
视频讲解:https://www.bilibili.com/video/BV1U84y1q7Ci

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    const res = [];
    const path = [];
    const backtraversing = (nums, startIndex) => {
        if (startIndex<=nums.length) {
            res.push([...path]);
        }

        for (let i=startIndex; i<nums.length; i++) {
            path.push(nums[i]);
            backtraversing(nums, i+1);
            path.pop();
        }

    }
    backtraversing(nums, 0);
    return res;
};

90.子集II

大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。
题目链接/文章讲解:https://programmercarl.com/0090.子集II.html
视频讲解:https://www.bilibili.com/video/BV1vm4y1F71J

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsetsWithDup = function(nums) {
    nums.sort((a,b)=>a-b)
    const res = [];
    const path = [];
    const backtraversing = (nums, startIndex) => {
        res.push([...path]);
        for (let i=startIndex; i< nums.length; i++) {
            if (i>startIndex && nums[i] === nums[i-1]) {
                continue;
            }
            path.push(nums[i]);
            backtraversing(nums, i+1);
            path.pop();
        }
    }
    backtraversing(nums, 0);
    return res;
};

标签:const,nums,28,随想录,return,startIndex,子集,path
From: https://www.cnblogs.com/yuanyf6/p/18231965

相关文章

  • 代码随想录算法训练营第四天 |节点交换、删除倒数n个节点、交叉链表、环形链表
    24题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/24题代码随想录讲解:https://programmercarl.com/0024.两两交换链表中的节点.html#思路19题链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/19题代码随想录:https://programmerca......
  • 基于springboot-vue的毕业论文管理系统(11728)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示二、资料项目演示视频介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 286、基于51单片机的温度报警(8路,DS18B20,热电偶,LCD1602)
    完整资料或定制滴滴我(有偿)见文末。目录一、设计功能二、Proteus仿真三、原理图四、程序源码五、资料包括一、设计功能多路温度采集系统1、刺激4路DS18B20温度和4路热电偶温度2、自动循环显示每路温度值3、设置温度上下限,温度过限报警二、Proteus仿真......
  • 285、基于51单片机的脉宽测量(LCD1602,NE555)
    完整资料或定制滴滴我(有偿)见文末。目录一、设计功能二、Proteus仿真三、原理图四、程序源码五、资料包括一、设计功能脉宽测量仪设计与制作(1)设计并制作一个用于测量脉冲宽度的脉宽测量仪;(2)可测量脉冲宽度范围为lms-ls;(3)在LCD屏上显示脉冲的宽度。二、Pr......
  • 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programmin
    系列文章目录操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)----操作系统介绍与接口示例操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)----xv6初探与实验一(Lab:Xv6and......
  • 代码随想录算法训练营day14(二叉树)
    代码随想录算法训练营day14(二叉树):学习内容:今天学习二叉树。二叉树节点标准写法(当前节点值,左右子节点,有点像链表节点的定义):structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(NULL),right(NULL){}};二......
  • 代码随想录算法训练营第四十六天|动态规划:完全背包理论基础、518.零钱兑换II、377. 组
    动态规划:完全背包理论基础文档讲解:代码随想录题目链接:52.携带研究材料(第七期模拟笔试)完全背包有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总......
  • 代码随想录算法训练营第四十九天| 139.单词拆分、多重背包
    139.单词拆分文档讲解:代码随想录题目链接:.-力扣(LeetCode)第一想法: 非空字符串s:背包非空单词的列表wordDict:物品每个物品可以使用多次,是一个完全背包问题看到这道题目的时候,大家应该回想起我们之前讲解回溯法专题的时候,讲过的一道题目回溯算法:分割回文串 (opens......
  • 代码随想录算法训练营第四十八天| 70. 爬楼梯(进阶版)、322. 零钱兑换、 279.完全平方数
     70.爬楼梯(进阶版)文档讲解:代码随想录题目链接:57.爬楼梯(第八期模拟笔试)我们之前做的爬楼梯是只能至多爬两个台阶。这次改为:一步一个台阶,两个台阶,三个台阶,.......,直到m个台阶。问有多少种不同的方法可以爬到楼顶呢?这又有难度了,这其实是一个完全背包问题。1阶,2阶,.........
  • 代码随想录算法训练营第二十四天 | 回溯算法 77.组合
    回溯算法理论基础文章讲解视频讲解回溯是递归的副产品,只要有回溯就会有递归回溯的本质是琼剧,所以效率不高回溯法可以解决的问题组合问题切割问题子集问题排列问题棋盘问题如何理解回溯回溯算法的问题都可以抽象为树形结构集合的大小就构成了书的快读,递归的深度......