每日5题Day8 - LeetCode 36 - 40

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!

第一题:36. 有效的数独 - 力扣(LeetCode)

题目要求我们进行判断,我们不需要自己填写,所以要一个标志位,来看当前的值是否在行、列、格中出现过,每当这时候可以考虑使用位掩码。

class Solution {public boolean isValidSudoku(char[][] board) {int[] line = new int[9];// 行int[] col = new int[9];// 列int[] cell = new int[9];// 9宫格for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {// 如果当前位置没有数字,不用判断。if (board[i][j] == '.')continue;//使用位掩码来记录数字int shift = 1 << (board[i][j] - '0');// 确定第几位int k = (i / 3) * 3 + j / 3;// 9宫格的第几个。// 如果对应的位置只要有一个被标记过,说明有冲突,直接返回false。//&与要求两边完全相同才大于0,下面这一步在判断是否有相同数字出现过if ((col[i] & shift) > 0 || (line[j] & shift) > 0|| (cell[k] & shift) > 0)return false;// 把当前位置所在的行,列以及9宫格都标记为该数字已经存在。//或|只要某一位是1,则都是1,所以不管原来的col[i]等是否为0,//反正判断的时候还是判断col[i] & shift,所以下面这样写正确//建议自己手动模拟一下col[i] |= shift;line[j] |= shift;cell[k] |= shift;}}return true;}
}

第二题:37. 解数独 - 力扣(LeetCode)

class Solution {//类似于dfs,要找到刚好唯一一组解,可能会涉及到已经放入的值回退的情况//直接使用空间换时间了,不回退直接判断可不可以放,注意看两层循环那个//if-for-return的逻辑:如果是'.' 那么能不能放数字,如果放了就继续,否则return false//再注意看for循环里的逻辑,判断这个数字放进去满足数独不,所以有一个isValidSudoku的判断函数public void solveSudoku(char[][] board) {solveSudokuHelper(board);}private boolean solveSudokuHelper(char[][] board){for (int i = 0; i < 9; i++){ // 遍历行for (int j = 0; j < 9; j++){ // 遍历列if (board[i][j] != '.'){ // 跳过原始数字continue;}for (char k = '1'; k <= '9'; k++){ // (i, j) 这个位置放k是否合适if (isValidSudoku(i, j, k, board)){board[i][j] = k;if (solveSudokuHelper(board)){ // 如果找到合适一组立刻返回//注意这个地方的判断,潜逃了两层true的判断return true;}board[i][j] = '.';}}return false;}}return true;}private boolean isValidSudoku(int row, int col, char val, char[][] board){//分别判断行列格里是否存在相同元素for (int i = 0; i < 9; i++){if (board[row][i] == val){return false;}}for (int j = 0; j < 9; j++){if (board[j][col] == val){return false;}}int startRow = (row / 3) * 3;int startCol = (col / 3) * 3;for (int i = startRow; i < startRow + 3; i++){for (int j = startCol; j < startCol + 3; j++){if (board[i][j] == val){return false;}}}return true;}
}

第三题:38. 外观数列 - 力扣(LeetCode)

public class Solution {// countAndSay 方法用于生成一个特定的字符串序列。// 序列的第 n 项是通过将第 n-1 项字符串中的连续相同字符进行计数和描述来生成的。public static String countAndSay(int n) {// 递归出口:如果 n 为 1,则返回字符串 "1",这是序列的第一项。if (n == 1) {return "1";}// 递归调用:如果 n 大于 1,则先递归调用 countAndSay(n - 1) 生成第 n-1 项,// 然后调用 transfer 方法将第 n-1 项转换为第 n 项。return transfer(countAndSay(n - 1));}// transfer 方法接受一个字符串 s 作为输入,并生成下一个字符串。// 它通过计数 s 中连续出现的相同字符,并将计数和字符拼接起来形成新的字符串。public static String transfer(String s) {StringBuilder sb = new StringBuilder(); // 使用 StringBuilder 来构建最终的字符串。int count = 1; // 初始化计数器,用于计数连续相同字符的数量。int length = s.length(); // 获取输入字符串的长度。int i;char temp = s.charAt(0); // 初始化临时变量 temp 为字符串的第一个字符。// 遍历输入字符串 s。for (i = 1; i <= length; i++) {// 如果当前字符 temp 与 s.charAt(i) 相同,继续计数。while (i < length && temp == s.charAt(i)) {count++; // 连续字符计数加 1。i++; // 移动到下一个字符。}// 如果 i < length,说明找到了不同的字符,更新 temp。if (i < length) {temp = s.charAt(i);}// 将当前字符的计数和字符本身添加到 StringBuilder 中。sb.append(count); // 添加计数。sb.append(s.charAt(i - 1)); // 添加字符本身。// 重置计数器,为下一个字符的计数做准备。count = 1; }// 返回构建好的字符串。return sb.toString();}
}

第四题:39. 组合总和 - 力扣(LeetCode)

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {//为了避免排列的重复情况出现,所以我们先进行排序Arrays.sort(candidates);traversal(0, target, candidates);return res;}private void traversal(int start, int target, int[] candidates){//把满足条件的提出来if(target == 0){res.add(new ArrayList<>(path));return;}for(int i = start; i < candidates.length; i++){//对于每一个candidate进行遍历,因为我们升序排列了,所以一旦选过了,//就不会再回去,就避免了排列情况的发生,实际上变为了组合if(target - candidates[i] >= 0){path.add(candidates[i]);traversal(i, target - candidates[i], candidates);//记得回溯path.remove(path.size() - 1);}else{//注意给一个边界条件,如果不满足了就退出break;}}}
}

 第五题:40. 组合总和 II - 力扣(LeetCode)


class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {Arrays.sort(candidates); // 对数组进行排序List<List<Integer>> res = new ArrayList<>();//因为每个候选人数字只能出现一次,所以我们与上一题不同的地方是要多加入一个标记数组backtrack(candidates, target, 0, new ArrayList<>(), res, new boolean[candidates.length]);return res;}private void backtrack(int[] candidates, int target, int start, List<Integer> path, List<List<Integer>> res, boolean[] used) {if (target == 0) {res.add(new ArrayList<>(path)); // 找到一种组合return;}for (int i = start; i < candidates.length; i++) {// 本质来说,这题有重复元素的排列导致的结果重复的问题,必须去重// 跳过重复的元素,注意这种去重的方式(避免上一行提到的情况)if (i > start && candidates[i] == candidates[i - 1]) {continue;}// 如果当前元素大于剩余目标,直接返回//注意边界条件if (candidates[i] > target) {break;}// 使用当前元素if (!used[i]) {used[i] = true; // 标记为已使用path.add(candidates[i]); // 添加到路径backtrack(candidates, target - candidates[i], i + 1, path, res, used); // 递归调用path.remove(path.size() - 1); // 回溯,移除当前元素used[i] = false; // 重置为未使用}}}
}

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

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

相关文章

Go源码--sync库(1)sync.Once和

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…

首个“软件供应链安全”国家标准正式发布!ToB企业震荡,影响90%开发者

​近日&#xff0c;由开源网安深度参与编制的GB/T 43698-2024《网络安全技术 软件供应链安全要求》和GB/T 43848-2024《网络安全技术 软件产品开源代码安全评价方法》两项国家标准正式发布。 GB/T 43698-2024《网络安全技术 软件供应链安全要求》&#xff0c;是国内首个面向软件…

Linux .eh_frame section以及libunwind

文章目录 前言一、LSB二、The .eh_frame section2.1 简介2.2 The Common Information Entry Format2.1.1 Augmentation String Format 2.3 The Frame Description Entry Format 三、The .eh_frame_hdr section四、libunwind五、基于Frame Pointer和基于unwind 形式的栈回溯比较…

双向链表C++,C#,Java版,这些程序大多已经过测试,一直在用。

先C版吧&#xff0c;我最先用的是C#,后来是Java&#xff0c;后来改用C版的&#xff0c;因为现在一直在用C&#xff0c;单链 表一直没写上去&#xff0c;因为我很少用&#xff0c;用的是双链表。 执行代码例子1&#xff1a; int main() { _DList<_string> s…

9.STL中list的常见操作(图文并茂)

目录 1.list的介绍及使用 1.1.list的构造 1.2 list iterator的使用 1.3. list capacity 1.4.list modifiers 1.5.list的迭代器失效 1.list的介绍及使用 list介绍 &#xff0c;可以通过以下图直观的感受到 vector 和 list 的区别 Vector 插入代价高&#xff0c;但便于排…

力扣HOT100 - 72. 编辑距离

解题思路&#xff1a; 动态规划 class Solution {public int minDistance(String word1, String word2) {int n1 word1.length();int n2 word2.length();int[][] dp new int[n1 1][n2 1];for (int j 1; j < n2; j) dp[0][j] dp[0][j - 1] 1;for (int i 1; i < …

《艺术大观》知网艺术刊:可加急, 出刊上网快

《艺术大观》 《艺术大观》征文通知 《艺术大观》期刊诚邀学者、艺术家和文化工作者积极投稿&#xff0c;共同探索艺术领域的前沿问题&#xff0c;促进学术交流和艺术创作的发展。我们欢迎各类艺术形式的研究与评论&#xff0c;包括但不限于绘画、雕塑、音乐、舞蹈、戏剧、电…

【数据结构】排序详解(希尔排序,快速排序,堆排序,插入排序,选择排序,冒泡排序)

目录 0. 前情提醒&#xff1a; 1. 插入排序 1.1 基本思想&#xff1a; 1.2 直接插入排序 实现步骤&#xff1a; 动图演示&#xff1a; 特性总结&#xff1a; 代码实现&#xff1a; 1.3 希尔排序&#xff08;缩小增量排序&#xff09; 基本思想&#xff1a; 步骤演示&…

AI大模型如何赋能智能座舱

AI 大模型如何赋能智能座舱 从上海车展上&#xff0c;我们看到由于智能座舱配置性价比较高&#xff0c;已经成为车企的核心竞争点之一&#xff0c;随着座舱硬件规模化装车&#xff0c;蔚小理、岚图、极狐等新势力开始注重座舱多模态交互&#xff0c;通过集成语音/手势/触控打造…

Leetcode—2769. 找出最大的可达成数字【简单】

2024每日刷题&#xff08;139&#xff09; Leetcode—2769. 找出最大的可达成数字 实现代码 class Solution { public:int theMaximumAchievableX(int num, int t) {return num t * 2;} };运行结果 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记得一键三连…

【实战】SpringBoot整合Websocket、Redis实现Websocket集群负载均衡

文章目录 前言技术积累什么是Websocket什么是Redis发布订阅Redis发布订阅与消息队列的区别 实战演示SpringBoot整合WebsoketWebsoket集群负载均衡 实战测试IDEA启动两台服务端配置nginx负载均衡浏览器访问模拟对话 前言 相信很多同学都用过websocket来实现服务端主动向客户端推…

【知识蒸馏】deeplabv3 logit-based 知识蒸馏实战,对剪枝的模型进行蒸馏训练

本文将对【模型剪枝】基于DepGraph(依赖图)完成复杂模型的一键剪枝 文章中剪枝的模型进行蒸馏训练 一、逻辑蒸馏步骤 加载教师模型定义蒸馏loss计算蒸馏loss正常训练 二、代码 1、加载教师模型 教师模型使用未进行剪枝&#xff0c;并且已经训练好的原始模型。 teacher_mod…

利用Python去除PDF水印

摘要 本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印&#xff0c;并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理&#xff0c;并提供一个简单的使用示例。 导言 简介&#xff1a;水印在许多 PDF 文件中都很常见&#x…

全国数据库管理系统设计赛-人大金仓内核实训安排正式发布

作为数据库领域国家队&#xff0c;人大金仓积极响应国家战略&#xff0c;通过赛题设计、内核技术支撑及赛前培训等多方面&#xff0c;大力支持全国大学生计算机系统能力大赛-数据库管理系统设计大赛成功举办。目前第二届全国大赛正在火热报名中&#xff0c;各种奖项等你来拿&am…

《web应用设计》第八次作业

我的小组长是姚若希&#xff0c;我们组课程设计的题目是&#xff1a;学生管理系统 &#xff0c;我认领的功能模块是&#xff1a;课程管理 2.查询并分页

只需三步,即可配置HTTPS跳转

HTTPS&#xff08;全称&#xff1a;Hyper Text Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。通过SSL/TLS协议对数据进行加密&#xff0c;保证了数据传输的安全&#xff0c;防止数据被截获、…

UWB论文:Introduction to Impulse Radio UWB Seamless Access Systems(2):脉冲;超宽带;测距;定位

3) 测距/接收器 像全球定位系统&#xff08;GPS&#xff09;这样的系统依赖于单向测距One Way Ranging&#xff08;OWR&#xff09;&#xff0c;其中多个卫星&#xff08;代表固定节点&#xff0c;称为锚点anchors&#xff09;定期传输同步的无线电数据包集合&#xff0c;这允许…

sh控制台输入文字多行 按“# ꧂ ꧁”结束

如果在Unix shell中输入多行文字&#xff0c;那么这样操作&#xff1a; 1. 打开您的终端&#xff08;Terminal&#xff09;。 2. 输入您的文字&#xff0c;每行文字后按回车键。 3. 当您完成输入所有文字后&#xff0c;输入“# ꧂ ꧁”然后按回车键&#xff0c;表示输入结束。…

将Surface的分辨率减半以省电(二合一本\笔记本电脑适用)

【完全自定义分辨率教程】这篇教程用于将Surface之类的高分屏&#xff08;高分辨率&#xff09;的二合一本或笔记本等的分辨率调整为原来的一半&#xff0c;以实现省电等目的。 下载CRU&#xff08;Custom Resolution Utility&#xff09;解压后&#xff0c;打开CRU.exe选择当…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…