LeetCode
我的刷题之路。。。
学而不思则忘
一切都可以
展开
-
面试题 08.01. 三步问题
【代码】面试题 08.01. 三步问题。原创 2023-01-15 17:28:25 · 143 阅读 · 0 评论 -
面试题 05.03. 翻转数位
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。输入: num = 1775(110111011112)输出: 8输入: num = 7(01112)输出: 4。原创 2023-01-15 16:56:35 · 160 阅读 · 0 评论 -
LCS 01. 下载插件
小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载。假定每分钟选择以下两种策略之一:使用当前带宽下载插件将带宽加倍(下载插件数量随之加倍)请返回小扣完成下载 n 个插件最少需要多少分钟。注意:实际的下载的插件数量可以超过 n 个。原创 2022-12-27 20:39:34 · 193 阅读 · 0 评论 -
1753. 移除石子的最大得分
你正在玩一个单人游戏,面前放置着大小分别为 a、b 和 c 的 三堆 石子。每回合你都要从两个 不同的非空堆 中取出一颗石子,并在得分上加 1 分。当存在 两个或更多 的空堆时,游戏停止。给你三个整数 a 、b 和 c ,返回可以得到的 最大分数。原创 2022-12-21 22:17:24 · 105 阅读 · 0 评论 -
1760. 袋子里最少数目的球
给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations。比方说,一个袋子里有 5 个球,你可以把它们分到两个新袋子里,分别有 1 个和 4 个球,或者分别有 2 个和 3 个球。选择任意一个袋子,并将袋子里的球分到 2 个新的袋子中,每个袋子里都有 正整数 个球。你的开销是单个袋子里球数目的 最大值 ,你想要 最小化 开销。请你返回进行上述操作后的最小开销。原创 2022-12-20 18:56:59 · 200 阅读 · 0 评论 -
1971. 寻找图中是否存在路径
有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。请你确定是否存在从顶点 source 开始,到顶点 destination 结束的 有效路径。原创 2022-12-19 22:19:44 · 114 阅读 · 0 评论 -
6139. 受限条件下可到达节点的数目
算法原创 2022-08-07 14:20:34 · 176 阅读 · 0 评论 -
606. 根据二叉树创建字符串
题目链接你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *原创 2022-03-20 13:51:49 · 142 阅读 · 0 评论 -
6022. 将数组和减半的最少操作次数
题目链接给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作)请你返回将 nums 数组和 至少 减少一半的 最少 操作数。输入:nums = [5,19,8,1]输出:3解释:初始 nums 的和为 5 + 19 + 8 + 1 = 33 。以下是将数组和减少至少一半的一种方法:选择数字 19 并减小为 9.5 。选择数字 9.5 并减小为 4.75 。选择数字 8 并减小原创 2022-03-20 11:35:55 · 188 阅读 · 0 评论 -
剑指 Offer 49. 丑数
题目连接我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。class Solution { public int nthUglyNumber(int n) { int[] res = new int[n]; res[0] = 1; int i = 0, j原创 2022-03-13 23:14:27 · 426 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。class Solution { public int lengthOfLongestSubstring(S原创 2022-03-13 22:46:35 · 90 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Solution { public int sumNums(int n) { int sum = n; boolean flag = n > 0 && (sum += sumNums(n - 1)) > 0; return sum; }}...原创 2022-01-18 19:45:43 · 130 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物题解动态规划:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) +原创 2022-01-18 19:26:09 · 156 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串
题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”题解类似于青蛙跳台阶问题动态规划class Solution { public int transla原创 2022-01-03 15:16:21 · 67 阅读 · 0 评论 -
剑指 Offer 45. 把数组排成最小的数
题目链接输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。输入: [10,2]输出: “102”输入: [3,30,34,5,9]输出: “3033459”输出结果可能非常大,所以你需要返回一个字符串而不是整数拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0class Solution { public String minNumber(int[] nums) { List<String>原创 2021-10-27 19:23:19 · 62 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II
题目在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。输入:nums = [3,4,3,3]输出:4输入:nums = [9,1,7,9,7,9,7]输出:1统计每个数字的次数class Solution { public static int singleNumber(int[] nums) { HashMap<Integer, Integer> map = new HashMap<>原创 2021-09-12 16:31:18 · 131 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字
题目链接数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。class Solution { /** 1 ~ 9 : 1 9位 10 ~ 99 : 2 2 * 90 = 180位 100 ~ 999 : 3 3 * 900 = 2700位 1000 ~ 9999 : 4 4 * 9000原创 2021-09-04 15:17:13 · 61 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数
题目连接输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6题解这篇写的很详细了:点击此处class Solution { public int countDigitOne(int n) { int digit = 1, res = 0; int high = n原创 2021-07-21 23:03:11 · 64 阅读 · 0 评论 -
剑指 Offer 38. 字符串的排列
题目连接输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。输入:s = “abc”输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]class Solution { private List<String> res = new LinkedList<>(); public String[] permutation(String s) { char[]原创 2021-07-14 23:10:24 · 68 阅读 · 0 评论 -
剑指 Offer 37. 序列化二叉树
题目连接请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。深度优先搜索,遇到空节点时序列化为"null",然后将得到的字符串分离,再重新建立一原创 2021-07-12 21:46:31 · 68 阅读 · 0 评论 -
剑指 Offer 36. 二叉搜索树与双向链表
题目连接输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。/*// Definition for a Node.class Node { public int val; public Node left; public Node right; public Node() {} public Node(int _val) { val = _val; }原创 2021-07-11 00:11:44 · 69 阅读 · 0 评论 -
剑指 Offer 41. 数据流中的中位数
题目链接如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。数据结构:用一个原创 2021-07-06 14:38:54 · 69 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
题目链接请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。使用HashMap解法/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(int val) { this.val = val;原创 2021-07-05 23:22:46 · 77 阅读 · 1 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径
题目链接:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。树的先序遍历刚好可以寻找一条树的路径,只需要在遍历前判断是否满足题目条件即可,也就是target == root.val && root.left == null && root.right == null;然后在递归结束也就是每次回溯时,不满足该条件的节点需要从arr中移除。/** * Definition for a b原创 2021-06-21 13:43:13 · 73 阅读 · 0 评论 -
剑指 Offer 33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。递归解法根据二叉搜索树特点:左子树的值小于根节点,右子树的值大于根节点。题目根的数组是二叉搜索树后序遍历的,所以最后一个元素就是树的根节点,根节点前面的分为左子树和右子树,所以只需要判断左右子树的数值是否满足二叉搜索树特点即可。class Solution { public boolean verifyPostorder(int[] pos.原创 2021-06-19 14:31:13 · 68 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III
题目链接请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * }原创 2021-06-18 21:50:17 · 74 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
题目链接从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。就层序遍历/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int[原创 2021-06-18 21:22:05 · 62 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
题目链接输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(原创 2021-06-18 21:11:54 · 68 阅读 · 0 评论 -
剑指 Offer 26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class So.原创 2021-06-18 19:56:53 · 69 阅读 · 0 评论 -
剑指 Offer 20. 表示数值的字符串
题目链接实现一个函数用来判断字符串是否表示数值(包括整数和小数)。数值(按顺序)可以分成以下几个部分:若干空格一个 小数 或者 整数(可选)一个 ‘e’ 或 ‘E’ ,后面跟着一个 整数若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符(’+’ 或 ‘-’)下述格式之一:至少一位数字,后面跟着一个点 ‘.’至少一位数字,后面跟着一个点 ‘.’ ,后面再跟着至少一位数字一个点 ‘.’ ,后面跟着至少一位数字整数(按顺序)可以分成以下几个部分:(可选)一个原创 2021-06-18 19:39:52 · 62 阅读 · 0 评论 -
剑指 Offer 19. 正则表达式匹配
请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但与"aa.a"和"ab*a"均不匹配。输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。输入:s = “ab”p = “."输出: true解释: ".” 表示可匹配零个或多个(’*.原创 2021-06-14 22:08:09 · 76 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。xnx^nxn可以分解为xn/2×xn/2x^{n/2} \times x^{n/2}xn/2×xn/2,这时还需要判断这个x是否为奇数,如果是奇数那就会多出一个x,在递归时直接假设有奇数的情况,因为如果是偶数,n%2=0返回1,也不影响结果。class Solution { public double myPow(double x, int n) { if (n =.原创 2021-06-13 18:26:44 · 60 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36n&l.原创 2021-06-13 16:32:06 · 78 阅读 · 0 评论 -
1114. 按序打印——多线程
题目我们提供了一个类:public class Foo { public void first() { print("first"); } public void second() { print("second"); } public void third() { print("third"); }}三个不同的线程 A、B、C 将会共用一个 Foo 实例。一个将会调用 first() 方法一个将会调用 second() 方法还有一个将会调用 third() 方法请设计修原创 2021-06-13 15:46:51 · 142 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围——DFS
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m =.原创 2021-06-10 20:47:05 · 97 阅读 · 1 评论 -
518. 零钱兑换 II
题目链接给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额: 5=5 5=2+2+15=2+1+1+1 5=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coins =原创 2021-06-10 13:42:48 · 134 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径——DFS
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,.原创 2021-06-10 13:09:51 · 93 阅读 · 0 评论 -
Number.226—— 翻转二叉树
题目连接:https://leetcode-cn.com/problems/invert-binary-tree/翻转一棵二叉树。利用前序遍历class Solution { // 先序遍历--从顶向下交换 public TreeNode invertTree(TreeNode root) { if (root == null) return null; // 保存右子树 TreeNode rig原创 2021-04-03 17:21:26 · 84 阅读 · 0 评论 -
Number.141——链表中是否有环
题目链接:https://leetcode-cn.com/problems/linked-list-cycle/判断给定的链表中是否有环。如果有环则返回true,否则返回false。快慢指针/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; *原创 2020-12-03 15:54:12 · 161 阅读 · 0 评论 -
Number.82.——删除排序链表中的重复元素 II
题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。输入: 1->2->3->3->4->4->5输出: 1->2->5输入: 1->1->1->2->3输出: 2->3题解:/** * Definition for si原创 2020-11-26 11:59:00 · 128 阅读 · 0 评论