D29第七章 回溯算法part05* 491.递增子序列* 46.全排列* 47.全排列 II

news/2025/2/6 0:51:55/

第七章 回溯算法part05

* 491.递增子序列

class Solution {private List<Integer> path = new ArrayList<>();private List<List<Integer>> res = new ArrayList<>();public List<List<Integer>> findSubsequences(int[] nums) {backtracking(nums,0);return res;}private void backtracking (int[] nums, int start) {if (path.size() > 1) {res.add(new ArrayList<>(path));}int[] used = new int[201];for (int i = start; i < nums.length; i++) {if (!path.isEmpty() && nums[i] < path.get(path.size() - 1) ||(used[nums[i] + 100] == 1)) continue;used[nums[i] + 100] = 1;path.add(nums[i]);backtracking(nums, i + 1);path.remove(path.size() - 1);}}
}

* 46.全排列

class Solution {List<List<Integer>> result = new ArrayList<>();// 存放符合条件结果的集合LinkedList<Integer> path = new LinkedList<>();// 用来存放符合条件结果boolean[] used;public List<List<Integer>> permute(int[] nums) {if (nums.length == 0){return result;}used = new boolean[nums.length];permuteHelper(nums);return result;}private void permuteHelper(int[] nums){if (path.size() == nums.length){result.add(new ArrayList<>(path));return;}for (int i = 0; i < nums.length; i++){if (used[i]){continue;}used[i] = true;path.add(nums[i]);permuteHelper(nums);path.removeLast();used[i] = false;}}
}

* 47.全排列 II

class Solution {//存放结果List<List<Integer>> result = new ArrayList<>();//暂存结果List<Integer> path = new ArrayList<>();public List<List<Integer>> permuteUnique(int[] nums) {boolean[] used = new boolean[nums.length];Arrays.fill(used, false);Arrays.sort(nums);backTrack(nums, used);return result;}private void backTrack(int[] nums, boolean[] used) {if (path.size() == nums.length) {result.add(new ArrayList<>(path));return;}for (int i = 0; i < nums.length; i++) {// used[i - 1] == true,说明同⼀树⽀nums[i - 1]使⽤过// used[i - 1] == false,说明同⼀树层nums[i - 1]使⽤过// 如果同⼀树层nums[i - 1]使⽤过则直接跳过if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {continue;}//如果同⼀树⽀nums[i]没使⽤过开始处理if (used[i] == false) {used[i] = true;//标记同⼀树⽀nums[i]使⽤过,防止同一树枝重复使用path.add(nums[i]);backTrack(nums, used);path.remove(path.size() - 1);//回溯,说明同⼀树层nums[i]使⽤过,防止下一树层重复used[i] = false;//回溯}}}
}


http://www.ppmy.cn/news/876071.html

相关文章

%.9d\n = %09d\n

#include <stdio.h> int main(void) { int year 05; printf("%09d\n",year); printf("%9d\n",year); printf("%.9d\n",year); return 0; } 输出结果&#xff1a; 000000005 ________5 000000005 测试环境&#xff1a;操作系统&#xff1a…

【Linux_选择题】(D29 0528)

【Linux_选择题】 (D29 0528) 1、X86体系结构在保护模式下中有三种地址&#xff0c;请问一下那种说法是正确的 ( A ) A 虚拟地址先经过分段机制映射到线性地址&#xff0c;然后线性地址通过分页机制映射到物理地址   B 线性地址先经过分段机制映射到虚拟地址&#xff0c;然后…

D29|递增子序列+全排列+总结去重逻辑

491.递增子序列 1.题目 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 2.实现 思考&#xff1a; 1&#xff09;此时不能对数组排序&#xff0c;而数组又有重复的元素该如何进行“树层”去重呢&#xff1f; 2&#xff09;对子…

PostgreSQL 行转列

法一: crosstab 原表(左)及现实结果表(右)展示: 第一步: 安装扩展 create extension tablefunc; ** 否则后续会报错 错误: 函数 crosstab(unknown, unknown) 不存在 第二步: 对表进行空值处理(此处将空值填写为字符串空值) update t_user_income set income空值 where i…

FPGA图像处理-灰度化

简介 用verilog实现彩色图像的灰度化算法&#xff0c;并进行Modelsim仿真。 图像处理操作中最简单的一类就是点操作&#xff0c;一个像素的输出只取决于输入图像的相应像素值。 RGB转GRAY公式&#xff1a; GRAY 0.299R 0.587G 0.114B 由于FPGA不方便小数运算&#xff0c;所…

搭建微服务工程 【详细步骤】

一、准备阶段 &#x1f349; 本篇文章用到的技术栈 mysqlmybatis[mp]springbootspringcloud alibaba 需要用到的数据库 订单数据库: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for shop_order -- --------------…

django+pyecharts制作工单系统实时刷新可视化仪表盘并设置报表定时发送

目录 仪表盘整体项目文件夹结构 demo应用效果 demo应用 demo应用的sql语句 demo应用定义的查询mysql类 在demo/views.py文件中 demo应用部分完整代码 urls.py views.py index.html 没有模糊背景 bindex.html 有模糊背景 demo2应用 demo2应用效果 2,将demo和demo2应用结…

D29 Vue2 + Vue3 K64-K83

D29.Vue F10.组件编码流程 组件自定义事件 全局事件总线&#xff08;K64-K66&#xff09; 1.组件编码流程 A.组件编码流程&#xff1a; 1&#xff09;拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突 2&#xff09;实现动态组件…