当前位置: 首页 > news >正文

LeeCode Practice Journal | Day25_Backtracking04

491. 非递减子序列

题目:491. 非递减子序列 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)

solution
public class Solution {public List<IList<int>> results = new List<IList<int>>();public IList<IList<int>> FindSubsequences(int[] nums) {List<int> result = new List<int>();subTraversal(nums, 0, result);return results;}public void subTraversal(int[] nums, int start, List<int> result){HashSet<int> numbers = new HashSet<int>();for(int i = start; i < nums.Length; i ++){if(result.Count > 0 && nums[i] < result[result.Count - 1]) {continue;  }if(numbers.Add(nums[i])){result.Add(nums[i]);if(result.Count > 1) results.Add(new List<int>(result));subTraversal(nums, i + 1, result);result.RemoveAt(result.Count - 1);}}}
}
summary

key:

HashSet同层查重

错误:

1、题意理解有误
递增子序列指在数组原顺序下的

2、子序列至少有两个元素

46. 全排列

题目:46. 全排列 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)
排列问题,使用数组或哈希表记录元素,也算一种树枝去重?

solution
public class Solution {public List<IList<int>> results = new List<IList<int>>(); public IList<IList<int>> Permute(int[] nums) {List<int> result = new List<int>();HashSet<int> numbers = new HashSet<int>();permuteTraversal(nums, numbers, result);return results;}public void permuteTraversal(int[] nums, HashSet<int> numbers, List<int> result){if(result.Count == nums.Length){results.Add(new List<int>(result));return;}for(int i = 0; i < nums.Length; i ++){if(numbers.Add(nums[i])){result.Add(nums[i]);permuteTraversal(nums, numbers, result);result.RemoveAt(result.Count - 1);numbers.Remove(nums[i]);}}}
}
summary

47. 全排列Ⅱ

题目:47. 全排列 II - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)
同一树枝使用数组标记元素是否已选过,同一树层使用HashSet去重

solution
public class Solution {public List<IList<int>> results = new List<IList<int>>(); public IList<IList<int>> PermuteUnique(int[] nums) {List<int> result = new List<int>();int[] mark = new int[nums.Length];permuteTraversal(nums, mark, result);return results;}public void permuteTraversal(int[] nums, int[] mark, List<int> result){if(result.Count == nums.Length){results.Add(new List<int>(result));return;}HashSet<int> layer = new HashSet<int>();for(int i = 0; i < nums.Length; i ++){if(mark[i] == 0){if(layer.Add(nums[i])){mark[i] = 1;result.Add(nums[i]);permuteTraversal(nums, mark, result);result.RemoveAt(result.Count - 1);mark[i] = 0;}}}}
}
summary

332. 重新安排行程

题目:332. 重新安排行程 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)

solution
summary

51. N皇后

题目:51. N 皇后 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)

solution
using System;
using System.Collections.Generic;
using System.Text;public class Solution {public List<IList<string>> results = new List<IList<string>>();public IList<IList<string>> SolveNQueens(int n) {List<StringBuilder> result = new List<StringBuilder>();for (int i = 0; i < n; i++) {StringBuilder row = new StringBuilder(new string('.', n));result.Add(row);}queensTraversal(result, 0, n, new bool[n], new bool[2 * n], new bool[2 * n]);return results;}public void queensTraversal(List<StringBuilder> sbs, int row, int n, bool[] cols, bool[] d1, bool[] d2) {// 可以加入结果集的情况if (row == n) {List<string> Result = new List<string>();foreach (StringBuilder sb in sbs) {Result.Add(sb.ToString());}results.Add(Result);return;}for (int col = 0; col < n; col++) {int id1 = col - row + n;int id2 = col + row;if (!cols[col] && !d1[id1] && !d2[id2]) {sbs[row][col] = 'Q';cols[col] = d1[id1] = d2[id2] = true;// 递归queensTraversal(sbs, row + 1, n, cols, d1, d2);// 回溯sbs[row][col] = '.';cols[col] = d1[id1] = d2[id2] = false;}}}
}
summary

错误:

1、理解错题意:
皇后不能互相攻击的限制:不能同行/同列/同斜线。指的是当前棋盘上所有皇后,而不是上下两行。。。
判断当前棋盘是否有效的条件

2、StringBuilder列表初始写法
错误写法如下:

List<StringBuilder> result = new List<StringBuilder>(n);
for(int i = 0; i < n; i ++)
{result[i] = new StringBuilder(n);for(int j = 0; j < n; j ++){result[i][j] = '.';}
}

37. 解数独

题目:37. 解数独 - 力扣(LeetCode)
题解:代码随想录 (programmercarl.com)

solution
public class Solution {public void SolveSudoku(char[][] board) {Solve(board);}private bool Solve(char[][] board) {for (int row = 0; row < 9; row++) {for (int col = 0; col < 9; col++) {if (board[row][col] == '.') {for (char num = '1'; num <= '9'; num++) {if (IsValid(board, row, col, num)) {board[row][col] = num;if (Solve(board)) {return true;}board[row][col] = '.';}}return false;}}}return true;}private bool IsValid(char[][] board, int row, int col, char num) {for (int i = 0; i < 9; i++) {if (board[row][i] == num || board[i][col] == num || board[row / 3 * 3 + i / 3][col / 3 * 3 + i % 3] == num) {return false;}}return true;}
}
summary

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • iOS 创建一个私有的 CocoaPods 库
  • Python3网络爬虫开发实战(2)爬虫基础库
  • Csrf复习(pikachu靶场和防御手段)
  • Linux——手动清理内存缓存
  • CSS、less、 Sass、
  • 前端canvas——赛贝尔曲线
  • Android笔试面试题AI答之Android系统与综合类(1)
  • 面试问题记录:
  • 技术实践—微前端技术应用
  • 秋招突击——7/24——知识补充——JVM类加载机制
  • iPhone 17系列取消17 Plus版本?新一代苹果手机迎来新变革
  • 支持向量机 及其分类案例详解(附Python 代码)
  • DNS域名解析服务器
  • Python高维度大型气象矩阵存储策略分享
  • FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Centos6.8 使用rpm安装mysql5.7
  • Just for fun——迅速写完快速排序
  • select2 取值 遍历 设置默认值
  • Vue 动态创建 component
  • 工作中总结前端开发流程--vue项目
  • 将回调地狱按在地上摩擦的Promise
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 排序算法学习笔记
  • 区块链共识机制优缺点对比都是什么
  • 算法之不定期更新(一)(2018-04-12)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 项目实战-Api的解决方案
  • - 转 Ext2.0 form使用实例
  • gunicorn工作原理
  • 函数计算新功能-----支持C#函数
  • # Kafka_深入探秘者(2):kafka 生产者
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (4.10~4.16)
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (接口封装)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)Google的Objective-C编码规范
  • (转)创业的注意事项
  • .net 4.0发布后不能正常显示图片问题
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core跨平台微服务学习资源
  • .net refrector
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .Net中wcf服务生成及调用
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用