![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
xiayucc
这个作者很懒,什么都没留下…
展开
-
Leetcode 102. 二叉树的层序遍历
题目描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。思路:广度优先遍历搜索(BFS),在Java中用List+Queue实现。1.首先将每一层的点加入到队列中(从根节点开始)2.对于每一层而言,只需要得到当前非空队列的大小,即当前层的节点数量,对每个节点进行左右子节点的判断,即若存在子节点,则加入到队列中。Java代码:/** * Definition for a binary tree node. * public class Tre原创 2020-12-21 14:51:56 · 87 阅读 · 0 评论 -
Leetcode 746. 使用最小花费爬楼梯
题目描述:数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。思路:对于每一层楼梯来说,设其最小话费为dp[i],那么dp[i] = min( dp[i-1]+cost[i-1], dp[i-2]+cost[i-2] )。Java代码:class Sol原创 2020-12-21 11:39:53 · 76 阅读 · 0 评论 -
Leetcode 714. 买卖股票的最佳时机含手续费
题目描述:给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。思路:每一天都只有有股票在手和没股票在手两种状态,前着对应卖和不卖,后者对应买和不买。Java代码:class Solution { public int[][] dp = new int[50050][2];原创 2020-12-17 18:06:59 · 85 阅读 · 1 评论 -
Leetcode 290. 单词规律
题目描述:给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。思路:利用HashMap将字符串和字符双向对应起来,遍历判断。Java代码:class Solution { private ConcurrentMap<String,Character> map1 = new ConcurrentHashMap&l原创 2020-12-16 13:25:19 · 69 阅读 · 0 评论 -
Leetcode 17.电话号码的字母组合
题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。解题思路:把每个键对应的字符串存下来,用dfs对数字字符串每一位进行枚举。Java代码:class Solution { String[][] num = new String [10][6]; public List<String>ans = new ArrayList<String>(); publi原创 2020-12-01 13:46:00 · 57 阅读 · 0 评论 -
Leetcode 16.最接近的三数之和
题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。解题思路:先将每个数乘3,减去target,然后两重循环+二分找出绝对值最小的三数之和。(为什么二分这么慢。。。)Java代码:class Solution { public int threeSumClosest(int[] nums, int target) { int原创 2020-12-01 11:43:56 · 55 阅读 · 0 评论 -
Leetcode 15.三数之和
题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。解题思路:先将数组排序,然后循环找出两个数的和,用二分查找找出剩余的那个数。要注意不能重复。Java代码:class Solution { public List<List<Integer>> threeSum(int[] nums) {原创 2020-12-01 10:48:44 · 61 阅读 · 0 评论 -
Leetcode 14.最长公共前缀
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。解题思路:第一种就是纵向比对,当比较到当前位置字符不全相等时就可以返回当前位置前当字符串。第二种是二分查找,二分的条件是当前长度的前缀是否都相同。第三种是先排序,然后纵向比较第一个和最后一个字符串的最长前缀。总的来说第一种和第三种复杂度差不多,第二种复杂度较大。Java代码:class Solution { public String longestCommonPrefix(Stri原创 2020-12-01 10:07:44 · 66 阅读 · 0 评论 -
Leetcode 13.罗马数字转整数
题目:给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。字符 数值I 1V 5X 10L 50C 100D 500M 1000I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90原创 2020-12-01 09:43:29 · 73 阅读 · 0 评论 -
Leetcode 12.整数转罗马数字
题目:给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。字符 数值I 1V 5X 10L 50C 100D 500M 1000I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。原创 2020-12-01 09:06:26 · 59 阅读 · 0 评论 -
Leetcode 11.盛最多水的容器
题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。解题思路:用两个值l,r表示区间的起止下标,如果height[l]<height[r],l向后移,否则r向前移。这样做的原理是,如果有一方较小,如果移动较大的一方,所得到的面积只会更小,而移动较小的一方,可以准确地遍历出最大的区域面原创 2020-11-30 17:43:15 · 62 阅读 · 0 评论 -
Leetcode 955. 删列造序 II
题目:给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符。比如,有 A = ["abcdef", "uvwxyz"],删除索引序列 {0, 2, 3},删除后 A 为["bef", "vyz"]。假设,我们选择了一组删除索引 D,那么在执行删除操作之后,最终得到的数组的元素是按 字典序(A[0] <= A[1] <= A[2] ... <= A[A.length - 1])排列的,然后请原创 2020-11-27 18:03:29 · 70 阅读 · 0 评论 -
Leetcode 09.回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。负数因为带负号的原因不可能回文,其余的只要判断其回文的数是否相等即可。class Solution { public boolean isPalindrome(int x) { if(x < 0)return false; int a = x; int b = 0; while(x > 0) { b原创 2020-11-20 17:31:58 · 50 阅读 · 0 评论 -
Leetcode 08.字符串转换整数 (atoi)
题目描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一原创 2020-11-20 17:17:17 · 83 阅读 · 0 评论 -
Leetcode 07. 整数反转
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。思路:因为当数的范围超过int时,再进行计算将会得到非预期的答案,可以利用这个特点。Java代码:class Solution { public int reverse(int x) { int ans = 0; while (x != 0) { //每次在下一位加上去后除以10和之前的答案比较,如果不一样说明超限了 if((ans * 1原创 2020-11-20 16:17:22 · 52 阅读 · 0 评论 -
Leetcode 06.Z 字形变换
题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。思路:这题很容易得出一、第一行和最后一行两个字符下标相差2*(numRows - 1)二、其余行两个字符相差为2*(numRows - 1) - 2i 和 2i (i表示行数,从0开始)Java代码:class Solution { public String convert(String s, int numRows) { int len = s.length(); if(原创 2020-11-20 15:05:36 · 68 阅读 · 0 评论 -
Leetcode 05.最长回文子串
题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。思路1:动态规划,对长度从1到len的字符串判断是否为回文,时间复杂度O(nn),空间复杂度O(nn)。Java代码:class Solution { public String longestPalindrome(String s) { int len = s.length(); int[][] dp = new int[1010][1010];原创 2020-11-10 17:18:18 · 68 阅读 · 0 评论 -
Leetcode 3.无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。Java代码:class Solution { public int lengthOfLongestSubstring(String s) { int ans = 0, start = 0; int[] map = new int[130];//用数组来存比较省时间 int len = s.length(); for (int i = 0; i < l原创 2020-10-31 13:53:34 · 82 阅读 · 0 评论 -
Leetcode 2.两数相加
题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。Java代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListN原创 2020-10-31 13:21:35 · 54 阅读 · 0 评论 -
Leetcode 1.两数之和
题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。Java代码:class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> hashMap = new HashMap<Integer, Integer>(); for (int i = 0; i &原创 2020-10-31 13:02:11 · 52 阅读 · 0 评论 -
Leetcode 983.最低票价
题目描述:这道题肯定是采用动态规划的方法。1.设一个dp数组表示完成当前计划后的最小花费;2.首先要处理出每一个一个计划日对于7天通行证和30天通行证的最优前计划日(即最小)。3.假定每一天都买一张为期为一天的通行证,那么花费以costs[0]累加;4.对于7天通行证来说,遍历从当前计划日的前计划日开始到当前计划日,比较得出最小的花费(min(dp[i],dp[j]+costs[1]))。5.对于30天通行证来说,也同样如此。最后得到的dp[len-1]就是要返回的答案。代码:class原创 2020-05-08 23:33:41 · 140 阅读 · 0 评论