LeetCode 1667, 36, 199

目录

  • 1667. 修复表中的名字
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 36. 有效的数独
    • 题目链接
    • 标签
    • 思路
    • 代码
  • 199. 二叉树的右视图
    • 题目链接
    • 标签
    • 思路
    • 代码

1667. 修复表中的名字

题目链接

1667. 修复表中的名字

  • Users的字段为user_idname

要求

编写解决方案,修复名字,使得只有第一个字符是大写的,其余都是小写的。

返回按 user_id 排序的结果表。

知识点

  1. substring():截取字符串,接收三个(或两个)参数:源字符串、起始字符索引(索引从1开始)和长度(可选),如果不写长度,则截取源字符串从 起始字符字符串末尾字符 的部分。例如select substring("abcde", 1, 2)的结果为abselect substring("abcde", 2)的结果为bcde
  2. upper():将字符串转化为大写的函数。例如select upper("aBc")的结果为ABC
  3. lower():将字符串转化为小写的函数。例如select upper("AbC")的结果为abc
  4. concat():拼接字符串的函数。例如select concat("us", "er")的结果为user
  5. order by:根据某些字段排序。

思路

想必大家看完知识点之后已经想出如何解决本题了:截取名字的第一个字符,转化为大写;截取名字从第二个字符到末尾字符的部分,转化为小写。然后再将这两部分拼接起来,最后根据user_id进行排序即可。

代码

select
    user_id,
    concat(upper(substring(name, 1, 1)), lower(substring(name, 2))) name
from
    Users
order by
    user_id

36. 有效的数独

题目链接

36. 有效的数独

标签

数组 哈希表 矩阵

思路

可以使用二维数组保存各行、各列、各3x3宫内数字1-9是否出现过,在遍历到某个数字时,先检查它所在行、列、3x3宫是否有这个数字,如果有,则返回false;如果没有,就标记它所在行、列、3x3宫有这个数字。如果能遍历完整个9x9宫,说明这个数独有效,返回true

二维数组如何保存数字1-9?对于行数组row来说,每行表示九宫格的每行,每列表示数字1-9;对于列数组col来说,每行表示九宫格的每列,每列表示数字1-9;对于3x3宫数组sub来说,每行表示九宫格的编号从09,每列表示数字1-9

行数组row和列数组col实现起来比较简单,但3x3宫数组sub的实现就不是这么简单了,需要计算每个3x3宫的编号,先给每个3x3宫编号,如下图所示:
九宫格

观察可得:

0行0列是第0个3x3宫,…,2行2列是第0个3x3
0行3列是第1个3x3宫,…,2行5列是第1个3x3
0行6列是第2个3x3宫,…,2行8列是第2个3x3
3行0列是第3个3x3宫,…,5行2列是第3个3x3
3行3列是第4个3x3宫,…,5行5列是第4个3x3
3行6列是第5个3x3宫,…,5行8列是第5个3x3
6行0列是第6个3x3宫,…,8行2列是第6个3x3
6行3列是第7个3x3宫,…,8行5列是第7个3x3
6行6列是第8个3x3宫,…,8行8列是第8个3x3

不难看出,每当列数增加3,编号增加1;每当行数增加3,编号增加3。所以可以得出一个结论:i行第j列的格子属于编号为i / 3 * 3 + j / 33x3

代码

class Solution {
    public boolean isValidSudoku(char[][] board) {
        boolean[][] row = new boolean[9][9];
        boolean[][] col = new boolean[9][9];
        boolean[][] sub = new boolean[9][9];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                char ch = board[i][j];
                if (ch == '.') { // 当ch不是数字时
                    continue; // 跳过ch
                }
                int num = ch - '1';
                int subIndex = i / 3 * 3 + j / 3;
                // 判断这个数字是否重复
                if (row[i][num] || col[j][num] || sub[subIndex][num]) {
                    return false;
                }
                // 进行标记
                row[i][num] = true;
                col[j][num] = true;
                sub[subIndex][num] = true;
            }
        }
        return true;
    }
}

199. 二叉树的右视图

题目链接

199. 二叉树的右视图

标签

树 深度优先搜索 广度优先搜索 二叉树

思路

由右视图的定义可知右视图是二叉树每层最右边节点组成的链表,所以本题的思路为:层序遍历二叉树,将每层的最后一个节点的值加入结果链表。如果对层序遍历不熟悉,可以看这篇文章:102. 二叉树的层序遍历。

对层序遍历做个总结:使用队列存放每层节点,预先放入根节点,在遍历每层节点时将下一层的节点(即当前层节点的左、右子节点)加入队尾,直到队列为空。

代码

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        if (root == null) { // 如果根节点为null
            return new ArrayList<>(); // 则返回空链表
        }

        List<Integer> res = new ArrayList<>(); // 结果链表
        LinkedList<TreeNode> queue = new LinkedList<>(); // 存放每层节点的队列
        queue.offer(root);
        while (!queue.isEmpty()) {
            int size = queue.size(); // 获取本层节点的数量
            for (int i = 0; i < size; i++) { // 遍历本层的所有节点
                TreeNode curr = queue.poll();
                if (i == size - 1) { // 如果是本层最后一个节点
                    res.add(curr.val); // 将该节点的值放入结果链表
                }
                if (curr.left != null) {
                    queue.offer(curr.left);
                }
                if (curr.right != null) {
                    queue.offer(curr.right);
                }
            }
        }
        return res;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于星火大模型的群聊对话分角色要素提取挑战赛-Lora微调与prompt构造

赛题连接 https://challenge.xfyun.cn/topic/info?typerole-element-extraction&optionphb 数据集预处理 由于赛题官方限定使用了星火大模型&#xff0c;所以只能调用星火大模型的API或者使用零代码微调 首先训练数据很少是有129条&#xff0c;其中只有chat_text和info…

【源码+文档+调试讲解】actual self 服装店的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统服装销售信息管理难度大&#xff0c;容错率低&#xff0c…

用GPT-4纠错GPT-4 OpenAI推出CriticGPT模型

根据OpenAI周四&#xff08;6月27日&#xff09;发布的新闻稿&#xff0c;该公司新推出了一个基于GPT-4的模型——CriticGPT&#xff0c;用于捕获ChatGPT代码输出中的错误。CriticGPT的作用相当于让人们用GPT-4来查找GPT-4的错误。该模型可以对ChatGPT响应结果做出批评评论&…

推荐4款好用到飞起的工具

爱发音 “爱发音”是一个专注于英语音标和字母发音学习的在线平台。该网站支持多平台访问&#xff0c;包括电脑、平板和手机&#xff0c;用户可以随时随地进行发音练习。爱发音提供美式音标、英式音标以及字母表的发音教学&#xff0c;用户可以通过点击音标来发音&#xff0c;长…

Vue3 按钮根据屏幕宽度展示折叠按钮

文章目录 一、组件封装二、使用三、最终效果(参考)四、参考 一、组件封装 ButtonFold.vue 1、获取父组件的元素&#xff0c;根据元素创建动态插槽 2、插槽中插入父元素标签。默认效果和初始状态相同。 3、当屏幕宽度缩小时&#xff0c;部分按钮通过 dropdown 的方式展示出来&a…

鸿蒙项目实战-月木学途:2.自定义底部导航

效果预览 Tabs组件简介 Tabs组件的页面组成包含两个部分&#xff0c;分别是TabContent和TabBar。TabContent是内容页&#xff0c;TabBar是导航页签栏&#xff0c;页面结构如下图所示&#xff0c;根据不同的导航类型&#xff0c;布局会有区别&#xff0c;可以分为底部导航、顶部…

gdb-dashboard:用Python重塑GDB调试体验

gdb-dashboard&#xff1b;一目了然的GDB调试&#xff0c;尽在掌控之中- 精选真开源&#xff0c;释放新价值。 概览 gdb-dashboard是一个用Python编写的模块化视觉界面&#xff0c;为GNU Debugger&#xff08;GDB&#xff09;提供了一个现代化的工作空间。它通过集成多个面板和…

DDR自学笔记

DDR的技术发展 标准名称 内核时钟(MHz) I/O时钟(MHz) 工作电压(v) 预取位数 突发长度 数据速率(MT/s) 数据带宽(GB/s) 拓扑 SDRAM 100-166 100-166 3.3 1 / 100-166 0.8-1.3 T DDR 133-200 133-200 2.5 2n 2 266-400 2.1-3.2 T DDR2 133-200 266-…

C++ | Leetcode C++题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isIsomorphic(string s, string t) {unordered_map<char, char> s2t;unordered_map<char, char> t2s;int len s.length();for (int i 0; i < len; i) {char x s[i], y t[i];if ((s2t.coun…

软考满分范文“论模型驱动架构设计方法及其应用”,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型独立于实现技术,以标准化的方式储存,利用…

vmware安装debian11

安装vmware16 下载镜像 https://repo.huaweicloud.com/debian-cd/ https://repo.huaweicloud.com/debian-cd/11.7.0/amd64/iso-dvd/ 安装 安装完成之后重启&#xff0c;输入账号密码进入&#xff0c;安装ssh服务器即可使用

C#开发的自定义提示和对话框窗体 - 开源研究系列文章

上次开发了《LUAgent服务器端工具》&#xff0c;然后就开发了自定义的提示和对话框窗体&#xff0c;因为这个是无边框窗体&#xff0c;所以不使用默认的MessageBox了&#xff0c;界面美观并且用户体验更好一些。然后就写了此文&#xff0c;让其他读者能够使用或者复用此类库的代…

Spark查询当前用户下所有账号的余额,如果当天没有余额则使用最近的余额

在使用Apache Spark进行数据分析时&#xff0c;你可能会处理一个包含用户账户和余额信息的数据集。如果你想要查询当前用户下所有账号的余额&#xff0c;并且如果当天没有余额记录&#xff0c;则使用最近的余额&#xff0c;你可以按照以下步骤进行&#xff1a; 数据准备&#x…

昇思25天学习打卡营第7天|linchenfengxue

Vision Transformer图像分类 1.Vision Transformer&#xff08;ViT&#xff09;简介 近些年&#xff0c;随着基于自注意&#xff08;Self-Attention&#xff09;结构的模型的发展&#xff0c;特别是Transformer模型的提出&#xff0c;极大地促进了自然语言处理模型的发展。由…

VUE-CLI脚手架项目的初步创建与配置

目录 1&#xff0c;首先创建一个VUE项目&#xff0c;注意选择版本为 2.6.10 2&#xff0c;打开APP.vue文件&#xff0c;并且删除APP.vue中多余的代码 3&#xff0c;创建index.vue文件 4&#xff0c;在此文件中写入如下图片中的代码来初步创建页面 5&#xff0c;创建router…

技术赋能教育:校园3D电子地图与AR导航解决方案

随着高考的落幕&#xff0c;又一批新鲜血液即将注入大学校园。面对陌生的环境&#xff0c;如何快速适应、准确找到目标地点&#xff0c;成为新生们的一大难题。同时&#xff0c;对于学校而言&#xff0c;如何向报考人员直观展示校园环境&#xff0c;提供沉浸式参观体验&#xf…

动态选线,动态的选择变量的位宽

一、原理 参考博客&#xff1a;&#xff1c;Verilog&#xff1e; 语法技巧&#xff1a;数据位操作_verilog移位操作-CSDN博客 下图是从作者的博客cv过来的一张图&#xff0c;讲的非常的清晰。实现了动态的选择选择数据的位宽&#xff0c;只需要动态的改变base_expr就可以。 …

Java——IO流(二)-(1/7):字符流-FileReader、FileWriter、字符输出流的注意事项(构造器及常用方法、小结)

目录 文件字符输入流-读字符数据进来 介绍 构造器及常用方法 实例演示 文件字符输出流-写字符数据出去 介绍、构造器及常用方法 实例演示 字符输出流使用时的注意事项 小结 文件字符输入流-读字符数据进来 介绍 FileReader&#xff08;文件字符输入流&#xff09; 作…

Bayes分类器设计

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在AI学习笔记&#…

【Mac】A Better Finder Attributes(文件批量重命名工具)

软件介绍 A Better Finder Attributes 7 是一款专为 macOS 设计的实用工具软件&#xff0c;主要用于批量修改文件和文件夹的属性。以下是它的一些主要特点和功能&#xff1a; 批量修改文件属性 可以快速批量修改文件的创建日期、修改日期以及访问日期。这对于整理和管理大量…