【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言

思路及算法思维,指路 代码随想录。
题目来自 LeetCode。

day26, 休息的周末~
day 27,周一,库存没了,哭死~

题目详情

[39] 组合总和

题目描述

39 组合总和
39 组合总和

解题思路

前提:组合的子集问题,统一元素可以重复选取
思路:回溯 + 剪枝。
重点:剪枝的前提是数组已排序。

代码实现

C语言
回溯 + 未排序剪枝
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/void backtracing(int* candidates, int candidatesSize, int target, int index, int *nums, int numsSize, int ***ans, int* returnSize, int** returnColumnSizes)
{// 退出条件if (0 == target){*ans = (int **)realloc(*ans, sizeof(int *) * ((*returnSize) + 1));(*ans)[*returnSize] = (int *)malloc(sizeof(int) * (numsSize));for (int i = 0; i < numsSize; i++){(*ans)[*returnSize][i] = nums[i];}*returnColumnSizes = (int *)realloc(*returnColumnSizes, sizeof(int) * ((*returnSize) + 1));(*returnColumnSizes)[*returnSize] = numsSize;(*returnSize)++;return ;}for (int j = index; j < candidatesSize; j++){if (target < candidates[j]){continue ;}// 递归nums[numsSize] = candidates[j];numsSize++;backtracing(candidates, candidatesSize, target - candidates[j], j, nums, numsSize, ans, returnSize, returnColumnSizes);// 回溯numsSize--;nums[numsSize] = 0;}return ;
}int** combinationSum(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes) {// 判空if (candidatesSize == 0){return NULL;}// 输出int **ans = NULL;int nums[41];int index = 0;*returnSize = 0;printf("%d\n", target);backtracing(candidates, candidatesSize, target, 0, nums, 0, &ans, returnSize, returnColumnSizes);if (*returnSize == 0){return NULL;}return ans;
}
回溯 + 排序 + 剪枝
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int cmp(const void *p1, const void *p2)
{return *(int *)p1 > *(int *)p2;
}void backtracing(int* candidates, int candidatesSize, int target, int index, int *nums, int numsSize, int ***ans, int* returnSize, int** returnColumnSizes)
{// 退出条件if (0 == target){*ans = (int **)realloc(*ans, sizeof(int *) * ((*returnSize) + 1));(*ans)[*returnSize] = (int *)malloc(sizeof(int) * (numsSize));for (int i = 0; i < numsSize; i++){(*ans)[*returnSize][i] = nums[i];}*returnColumnSizes = (int *)realloc(*returnColumnSizes, sizeof(int) * ((*returnSize) + 1));(*returnColumnSizes)[*returnSize] = numsSize;(*returnSize)++;return ;}// 剪枝for (int j = index; (j < candidatesSize) && (target >= candidates[j]); j++){// 递归nums[numsSize] = candidates[j];numsSize++;backtracing(candidates, candidatesSize, target - candidates[j], j, nums, numsSize, ans, returnSize, returnColumnSizes);// 回溯numsSize--;nums[numsSize] = 0;}return ;
}int** combinationSum(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes) {// 判空if (candidatesSize == 0){return NULL;}// 排序qsort(candidates, candidatesSize, sizeof(int), cmp);// 输出int **ans = NULL;int nums[41];int index = 0;*returnSize = 0;backtracing(candidates, candidatesSize, target, 0, nums, 0, &ans, returnSize, returnColumnSizes);if (*returnSize == 0){return NULL;}return ans;
}

[40] 组合总和II

题目描述

40 组合总和II
40 组合总和II

解题思路

前提:组合的子集问题,同一元素只能使用一次,但是结果不包含重复组合
思路:回溯 + 剪枝
重点:结果子集中排除重复组合,需要树形结构中,同一树层的相同的元素值不可重复选取,使用used数组实现去重。

代码实现

C语言
利用used数组 false,同一树层 去重
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/int cmp(const void *p1, const void *p2)
{return *(int *)p1 > *(int *)p2;
}void backtracing(int* candidates, int candidatesSize, int target, int index, int *nums, int numsSize, bool *used, int ***ans, int* returnSize, int** returnColumnSizes)
{// 退出条件if (0 == target){*ans = (int **)realloc(*ans, sizeof(int *) * ((*returnSize) + 1));(*ans)[*returnSize] = (int *)malloc(sizeof(int) * (numsSize));for (int i = 0; i < numsSize; i++){(*ans)[*returnSize][i] = nums[i];}*returnColumnSizes = (int *)realloc(*returnColumnSizes, sizeof(int) * ((*returnSize) + 1));(*returnColumnSizes)[*returnSize] = numsSize;(*returnSize)++;return ;}for (int j = index; (j < candidatesSize) && (target >= candidates[j]); j++){// 去重if ((j > 0) && (candidates[j] == candidates[j - 1]) && (used[j - 1] == false)){continue;}// 递归nums[numsSize] = candidates[j];used[j] = true;numsSize++;backtracing(candidates, candidatesSize, target - candidates[j], j + 1, nums, numsSize, used, ans, returnSize, returnColumnSizes);// 回溯numsSize--;used[j] = false;nums[numsSize] = 0;}return ;
}int** combinationSum2(int* candidates, int candidatesSize, int target, int* returnSize, int** returnColumnSizes) {// 判空if (candidatesSize == 0){return NULL;}// 排序qsort(candidates, candidatesSize, sizeof(int), cmp);// 输出int **ans = NULL;int nums[100] = {0};bool used[100] = {false};int index = 0;*returnSize = 0;backtracing(candidates, candidatesSize, target, 0, nums, 0, used, &ans, returnSize, returnColumnSizes);if (*returnSize == 0){return NULL;}return ans;
}

[131] 分割回文串

题目描述

131 分割回文串
131 分割回文串

解题思路

前提:分割问题
思路:。
重点:。

代码实现

C语言
// 待补充

今日收获

  1. 组合子集问题:去重,同一树层去重 vs 同一树杈去重
  2. 切割问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/339957.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云渲染农场什么是线程模式?

许多设计师在选择云渲染农场时&#xff0c;常常会遇到48线程、56线程、72线程等选项&#xff0c;然而&#xff0c;不少新手在面对这些选择时&#xff0c;往往无法直观地感受到不同线程数量之间的差异。接下来&#xff0c;我们将共同探讨线程的作用和影响&#xff0c;帮助大家更…

「小白必读」国内超火的 8 款 AI 大模型,你的副业都来自它

大家好&#xff0c;最近好多朋友在问我&#xff0c;国内是否有好用的大模型&#xff0c;今天我就整理好 8 款大模型&#xff0c;大家可以多尝试&#xff0c;一定会有不一样的感觉。 01 HOTSPOT Kimi 网址&#xff1a;https://kimi.moonshot.cn/ Kimi 是由月之暗面科技有限公…

Anacode+YOLO识别图片

一、安装Anacoda 因为我原本是已经安装了python&#xff0c;后面直接卸载了&#xff0c;然后安装了最新版的anacoda 下载网址为&#xff1a; Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载版本是&#xff1a; 按照安装教程直接…

初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】

介绍 手上有一块立创开发板&#xff0c;本着不吃灰的原则把它用起来&#xff0c;今天就来用它来连接上自己部署的MQTT服务器进行数据通信。 硬件&#xff1a;立创开发板 开发环境&#xff1a;Arduino IDE Win11 MQTT 平台&#xff1a;EMQX Platform 立创开发板介绍&#xff1…

nginx和proxy_protocol协议

目录 1. 引言2. HTTP server的配置3. Stream server的配置3.1 作为proxy_protocol的前端服务器3.2 作为proxy_protocol的后端服务器1. 引言 proxy_protocol 是haproxy开发的一种用于在代理服务器和后端服务器之间传递客户端连接信息的协议。使用 proxy_protocol 的主要优势是能…

Redis中大Key与热Key的解决方案

原文地址&#xff1a;https://mp.weixin.qq.com/s/13p2VCmqC4oc85h37YoBcg 在工作中Redis已经成为必备的一款高性能的缓存数据库&#xff0c;但是在实际的使用过程中&#xff0c;我们常常会遇到两个常见的问题&#xff0c;也就是文章标题所说的大 key与热 key。 一、定义 1.1…

索尼CEO宣布全力推进AI电影制作,《蜘蛛侠》制片人坚称不用AI

原标题&#xff1a;索尼互娱制片人与CEO唱反调 易采游戏网6月3日消息&#xff1a;在最近的一次行业会议上&#xff0c;索尼影业高层首席执行官托尼文西奎拉向媒体透露&#xff0c;索尼正在全力推进人工智能(AI)技术的研发与应用&#xff0c;特别是在电影制作流程中。这一策略旨…

【Hive SQL 每日一题】统计各个商品今年销售额与去年销售额的增长率及排名变化

文章目录 测试数据需求说明需求实现分步解析 测试数据 -- 创建商品表 DROP TABLE IF EXISTS products; CREATE TABLE products (product_id INT,product_name STRING );INSERT INTO products VALUES (1, Product A), (2, Product B), (3, Product C), (4, Product D), (5, Pro…

24年西藏事业单位报名详细流程

✨各位姐妹们注意啦&#xff01;24西藏事业单位公告已出&#xff0c;本次计划公开招聘8⃣9⃣9⃣人即日起开始报名&#xff0c;想要上岸的姐妹们要抓紧了哦✊趁着还有时间赶紧开卷&#xff01;&#xff01;&#xff01; &#x1f308;24西藏事业单位招聘考试&#xff1a; &…

双向带头链表实现

目录 一. 逻辑结构图解 1. 节点中存储的值 2.逻辑实现 二. 各种功能实现 1. 创建节点函数 2. 初始化哨兵位 3. 尾插 4. 头插 5. 尾删 6. 头删 7. 打印链表值 8. 查找数据&#xff0c;返回节点地址 9. 指定地址后插入节点 10. 删除指定地址节点 11. 销毁链表 三.…

Meterpreter工具使用

Meterpreter属于stage payload&#xff0c;在Metasploit Framework中&#xff0c;Meterpreter是一种后渗透工具&#xff0c;它 属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注 入”理念实现的&#xff0c;它能够通过创建一个新进…

碰撞检测技术在AI中的重要作用

引言&#xff1a; 随着人工智能技术的不断发展&#xff0c;AI已经渗透到我们生活的方方面面。在游戏、机器人、虚拟现实等领域中&#xff0c;碰撞检测技术扮演着至关重要的角色。本文将探讨碰撞检测技术在AI中的作用&#xff0c;以及如何利用这项技术来改善AI系统的性能和用户体…

在Unity中配置Android项目以允许HTTP流量,解决AVPro在Android平台中无法播放http视频

解决方法快速通道&#xff1a;拉到底&#xff0c;看倒数第二张图 好记性不如烂笔头 最近在使用AVpro插件播放http视频&#xff0c;在Editor中一切正常&#xff0c;然而打包在Android平台下就播放不了 AVPro在Unity中的警告&#xff1a; 感觉只是个警告&#xff0c;没引起注意…

超越Devin!姚班带队,他们创大模型编程新世界纪录

超越Devin&#xff01;SWEBench排行榜上迎来了新玩家—— StarShip CodeGen Agent&#xff0c;姚班带队初创公司OpenCSG出品&#xff0c;以23.67%的成绩获得全球第二名的成绩。 同时创造了非GPT-4o基模的最高纪录&#xff08;SOTA&#xff09;。 我们都知道&#xff0c;SWEBe…

人脸识别技术与人证合一智能闸机的剖析

人脸识别技术&#xff0c;作为一种先进的生物认证手段&#xff0c;依据个体面部独有的特征信息来进行身份验证。这项技术通过捕获图像或视频中的面部数据&#xff0c;执行一系列精密步骤&#xff0c;包括图像获取、面部定位、预处理、特征提取与比对&#xff0c;以确认个人身份…

FL Studio怎么给钢琴加延音 FL Studio怎么用钢琴做伴奏

在使用钢琴音色进行音乐创作的时候&#xff0c;可以对钢琴进行延音处理&#xff0c;这样处理的音色给人的感觉会更加的饱满丰富&#xff0c;同时&#xff0c;给钢琴加了延音之后&#xff0c;钢琴的声音时值也会相应的变长&#xff0c;听起来更加的柔和。今天就和大家讲一讲&…

DVWA靶场搭建:Apache、MySQL、PHP、DVWA

最近为了能够较为真实地学习Web渗透的各种技术&#xff0c;就想着自己搭建一个专门用于学习的Web演练平台--DVWA“靶场”。 DVWA可以进行暴力&#xff08;破解&#xff09;、命令行注入、跨站请求伪造、文件包含、文件上传、不安全的验证码、SQL注入、SQL盲注、弱会话ID、XSS漏…

深度学习知识与心得

目录 深度学习简介 传统机器学习 深度学习发展 感知机 前馈神经网络 前馈神经网络&#xff08;BP网络&#xff09; 深度学习框架讲解 深度学习框架 TensorFlow 一个简单的线性函数拟合过程 卷积神经网络CNN&#xff08;计算机视觉&#xff09; 自然语言处理NLP Wo…

Docker 私有仓库部署和管理

目录 一、案例一 概述 二、案例一 前置知识点 2.1、什么是 Docker Compose 2.2、什么是 Consul 三、案例一 使用 docker Compose 搭建 Consul 集群环境 3.1、案例实验环境 3.2、案例需求 四、案例实施 4.1、Docker 网络通信 1&#xff09;端口映射 2&#xf…

Ubuntu server 24 (Linux) 安装部署smartdns 搭建智能DNS服务器

SmartDNS是推荐本地运行的DNS服务器&#xff0c;SmartDNS接受本地客户端的DNS查询请求&#xff0c;从多个上游DNS服务器获取DNS查询结果&#xff0c;并将访问速度最快的结果返回给客户端&#xff0c;提高网络访问速度和准确性。 支持指定域名IP地址&#xff0c;达到禁止过滤的效…