LeetCode每日一题 357. 统计各位数字都不同的数字个数
残念,博主对于 dp 真的非常地深恶痛绝,实在是学不会 dp 其中的精髓,dp 苦手 😩,所以今天的每日一题放弃吧。
开玩笑,明明是每日一题欸! LeetCode 357. 统计各位数字都不同的数字个数 。
题目给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10^n 。
示例示例1:
123输入:n = 2输出:91解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。
示例2:
12输入:n = 0输出:1
题解刚看完:好欸又是暴力完活的一天!…… 但是这个难度绝对不会是暴力能够解决的!
仔细思索可以发现,当 n=2 时,我们易得出重复数字是 11、22、33、44……88、99 这几个,那么当 n=3 时呢?会发现这里面包含了 9 个 n=2 的重复数字 x11、x22……x99 ,当然也有诸如 100、101、202…… 这样的数字当然也是。
所以这样子有叠加性质的答案绝对是动态规划无疑了!(动规真乃天杀我也!!!)
所以我们应该开始往动规的 ...
LeetCode每日一题 653. 两数之和 IV - 输入 BST
今天是一道简单题,来看题目LeetCode 653. 两数之和 IV - 输入 BST
题目给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
示例示例1:
12输入: root = [5,3,6,2,4,null,7], k = 9输出: true
示例2:
12输入: root = [5,3,6,2,4,null,7], k = 28输出: false
题解题目很简单,一看就懂。
先简单介绍一下BST,BST是满足以下三个条件的二叉树:
节点的左子树包含的节点的值小于该节点的值
节点的右子树包含的节点的值大于等于该节点的值
节点的左子树和右子树都是BST
接下来介绍两种解法。
BST特性:中序遍历 + 双指针因为是BST,所以直接使用中序遍历能够转换成有序数组,进而能够使用双指针。
先把整个二叉树通过中序遍历加入到数组 nums 中,然后对其用双指针 nums[l] + nums[r] 计算出值与 k 对比大小:
如果 nums[l] + nums[r] > k 则 r--
如 ...
经历了一点小挫折以后,我突然开始理解了抽烟喝酒
今天做题的时候脑子简直就搅成了一团浆糊,看着题头晕脑涨,突然心中冒出来个想法,“抽支烟冷静一下吧”,让我打了打冷颤。
虽然我平时偶尔会自己为自己来杯酒陶醉一番,但我并不抽烟。因为自小以来长辈的教育,以及本身也深知吸烟有害,所以我根本就不碰烟,平时拒绝掉朋友的烟,还会被白眼称为“小朋友”。
不理解为什么烟民们会非常习惯性的下意识抽一支烟,在以前就我看来其实仅仅是烟瘾。 但今天我对此发生了改观,原因就是我突然也想抽一支(。为了赶快将这个奇怪的念头压下去,我拿出了咖啡,却发现居然只剩下一包了……快速地烧了壶开水,打开包装给自己滤了杯咖啡,一口入嘴,豆子那股草本味就在我口腔中爆发出来,让我清醒不少……突然发现,手中的咖啡就如同烟民们手中那根烟一样,我豁然开朗,解开了“下意识地抽一支烟”这个疑惑。它根本就不是能够解释得出来的一件事,就是这样般、本该这样般地自然而然的事。或许我也真的需要一根烟来帮助我思考问题,在一筹莫展的时候,抽一支烟换换心情,或许能够走出死胡同找到答案。
但我依旧不会去因此而抽烟,哈哈哈。
但我要去买咖啡了,下一篇文章见。
LeetCode每日一题 2039. 网络空闲的时刻
今天的题目是LeetCode 2039. 网络空闲的时刻 ,令我产生多个思考,来看题目。
题目给你一个有 n 个服务器的计算机网络,服务器编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示服务器 ui 和 vi 之间有一条信息线路,在 一秒 内它们之间可以传输 任意 数目的信息。再给你一个长度为 n 且下标从 0 开始的整数数组 patience 。
题目保证所有服务器都是 相通 的,也就是说一个信息从任意服务器出发,都可以通过这些信息线路直接或间接地到达任何其他服务器。
编号为 0 的服务器是 主 服务器,其他服务器为 数据 服务器。每个数据服务器都要向主服务器发送信息,并等待回复。信息在服务器之间按 最优线路 传输,也就是说每个信息都会以 最少时间 到达主服务器。主服务器会处理 所有 新到达的信息并 立即 按照每条信息来时的路线 反方向 发送回复信息。
在 0 秒的开始,所有数据服务器都会发送各自需要处理的信息。从第 1 秒开始,每 一秒最 开始 时,每个数据服务器都会检查它是否收到了主服务器的回复信息(包括新发 ...
LeetCode加练 6. Z 字形变换
不知道用什么顶部图了,直接套用每日一题的好了。今天加练的原因是前一道题实在不咋地,思来想去再做一题罢,LeetCode 6. Z 字形变换 。来看题目。
题目将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
123P A H NA P L S I I GY I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数:
1string convert(string s, int numRows);
##示例示例 1:
123输入:s = "PAYPALISHIRING", numRows = 3输出:"PAHNAPLSIIGYIR"
示例 2:
1234567输入:s = "PAYPALISHIRING", numRows = 4输出:"PINALSIGYAHRPI" ...
LeetCode每日一题 2043. 简易银行系统
LeetCode 2043. 简易银行系统 虽说是一道普通题,但事实上其实是简单题,LeetCode 似乎特别喜欢把一些设计类题目写成普通题。不是很想讲,但是踩了小坑,为了让我自己记住还是写一下吧。
题目你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 n 个账户,编号从 1 到 n 。每个账号的初始余额存储在一个下标从 0 开始的整数数组 balance中,其中第 (i + 1) 个账户的初始余额是 balance[i] 。
请你执行所有 有效的 交易。如果满足下面全部条件,则交易 有效 :
指定的账户数量在 1 和 n 之间
取款或者转账需要的钱的总数 小于或者等于 账户余额。
实现 Bank 类:
Bank(long[] balance) 使用下标从 0 开始的整数数组 balance 初始化该对象。
boolean transfer(int account1, int account2, long money) 从编号为 account1 的账户向编号为 account2 的账户转帐 money 美元。如果交易成功,返 ...
每日一题LeetCode 720. 词典中最长的单词
今天的每日一题!LeetCode 720. 词典中最长的单词,想了很久,功夫还是不到家啊。
题目给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。
若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。
示例示例1:
123输入:words = ["w","wo","wor","worl", "world"]输出:"world"解释: 单词"world"可由"w", "wo", "wor", 和 "worl"逐步添加一个字母组成。
示例2:
123输入:words = ["a", "banana", "app", "appl", "ap", &qu ...