自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 【LeetCode-Medium-Java】面试题 08.12. 八皇后

题目设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。示例输入:4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释: 4 皇后问题存在如下两个不同的解法。[[".Q..", // 解法 1"...Q","Q...","..Q."],["..Q....

2020-09-30 14:48:41 94

原创 【LeetCode-Medium-Java】96. 不同的二叉搜索树

题目给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2...

2020-09-25 15:22:46 64

原创 【LeetCode-Easy-Java】122. 买卖股票的最佳时机 II

题目给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在...

2020-09-25 08:24:51 97

原创 【LeetCode-Easy-Java】617. 合并二叉树

题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例输入: Tree 1 Tree 2 1 2 ...

2020-09-23 12:30:53 82

原创 回溯算法总结

回溯和剪枝的概念回溯算法其实是构造一棵解空间树的过程。在搜索至树中任一节点时,先判断该节点对应的部分是否是满足约束条件,或者是否超出目标函数的界,也就是判断该节点是否包含问题的最优解。如果肯定不包含,则跳过对该节点为根的子树的搜索,即所谓的剪枝;否则,进入该节点为根的子树,继续按照深度优先策略搜索。去重:例如求解子集的问题中,给定nums数组为1,2,2。当以1为节点的时候可以得到1,2,2的一条分支。然而另一条分支也是1,2,2。所以,在同一层上的,如果两个相邻的节点的数值相同,后面的就.

2020-09-22 20:52:23 124

原创 【LeetCode-Medium-Java】47. 全排列 II

题目:给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]解题思路:回溯如何理解去重?https://leetcode-cn.com/problems/permutations-ii/solution/47-quan-pai-lie-iiche-di-li-jie-pai-lie-zhong-de-q/本题中去重的方式是如果nums[i-1]和nums[i]相等并且n.

2020-09-21 19:38:16 108

原创 【LeetCode-Medium-Java】39. 组合总和

题目:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [2,2,3]]解题思路:回溯算法注意:for循环中的dfs,传参...

2020-09-20 15:22:45 153

原创 【LeetCode-Medium-Java】17. 电话号码的字母组合

题目:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].解题思路:回溯算法1、每个字母代表的字母存放在map中2、dfs记录到digits的第几个数字了cur,记录路径path,和最后的结果res。3、注意:for循环循环的是分支的东西,...

2020-09-20 10:15:28 121

原创 【LeetCode-Medium-Java】78. 子集

题目:给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路:回溯算法注意:1、不用考虑去重2、for循环中递归的时候,传入的是i+1,不是cur+1!!!代码:public static List<...

2020-09-20 09:47:17 125

原创 【LeetCode-Medium-Java】46. 全排列

题目:给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路:回溯1、dfs需要的参数:nums数组,每条不同的路线path,nums数组的长度len,最后总的结果res,nums[i]是否被用过了used数组。2、dfs函数中,for循环遍历nums[i] 若已经访问过,continue;3、...

2020-09-18 17:23:04 93

原创 【LeetCode-Medium-Java】322. 零钱兑换

题目:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例:输入: coins = [1, 2, 5]amount = 11输出: 3 解释: 11 = 5 + 5 + 1解题思路:动态规划* 1、dp[i] 表示凑够 i 元 需要的最少硬币数 假设硬币面值有1,2,5元* 2、dp[i]一定是由dp[i-1]+1元/+2元/+5元得来的* 3、所以..

2020-09-17 17:55:07 136

原创 【LeetCode-Medium-Java】120. 三角形最小路径和

题目:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3] ]自顶向下的最小路径和为11(即,2+3+5+1= 11)。解题思路:动态规划1、最开始想的是dp[i] 表示到达第i行的最小路径和。后来一想,不对劲呀,最后一排的具...

2020-09-17 16:04:27 93

原创 【LeetCode-Medium-Java】64. 最小路径和

题目:给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解题思路:动态规划* 1、dp[i][j] 表示到达 i,j位置最小的总和。* 2、dp[i][j] = dp[i-1][j]+grid[i][j] 和 dp[i][j-1]+gr...

2020-09-16 15:45:38 82

原创 【LeetCode-Easy-Java】198. 打家劫舍

题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。...

2020-09-15 14:36:35 123

原创 【LeetCode-Easy-Java】53.最大子序列和

题目:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。解题思路1:动态规划1、dp(i)表示以nums[i]为最后一个元素组成的连续子数组的最大和。2、dp(i-1)表示以nums[i-1]为最后一个元素组成的连续子数组的最大和。3、dp(i)可以表示成f(i-1)+nums[i],与dp...

2020-09-14 23:03:43 75

原创 【LeetCode-Easy-Java】26. 删除排序数组中的重复项

题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。思路:双指针, i 指向第一个元素,j 指向第二个元素,如果元素 j 和元素i相等...

2020-09-07 11:03:31 87

原创 【LeetCode-Easy-Java】21. 合并两个有序链表

21. 合并两个有序链表题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4思路:用两个指针指向分别指向两个链表,比较指针指向的两个节点,小的那个指针往后移,并且把小的那个节点添加到合并后的新链表中。dummy node:如果新链表不用dummy node记录首节点,随着...

2020-09-06 16:08:24 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除