2 啊我太菜了

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 3w+

404. 左叶子之和

404. 左叶子之和难度:简单2020/9/19每日一题打卡√题目描述解题思路为啥都说这个是弱智题哇,我还想了好久来着最后写出的答案画风跟评论里的也有点不一样想的是分情况,如果已经是左叶子节点,就累加结果,否则继续遍历public int sumOfLeftLeaves(TreeNode root) { if(root == null) { return 0; } if(root.left == null){

2020-09-19 10:18:54

637. 二叉树的层平均值

637. 二叉树的层平均值难度:简单题目描述解题思路普普通通的层序遍历/* * 637. 二叉树的层平均值 * 2020/9/14 * easy */ public List<Double> averageOfLevels(TreeNode root) { List<Double> res = new LinkedList<>(); if(root == null)

2020-09-14 12:55:17

79. 单词搜索 DFS回溯

79. 单词搜索难度:中等前几天小米笔试的真题来着,但是当时没给二维矩阵题目描述解题思路回溯+剪枝+状态重置 /* * 79. 单词搜索 * 2020/9/14 * medium */ public boolean exist(char[][] board, String word) { char[] str = word.toCharArray(); int m = board.l

2020-09-14 10:46:37

216. 组合总和 III

216. 组合总和 III难度:中等2020/9/11每日一题打卡题目描述解题思路也是回溯+剪枝,貌似好像也只要套模板1 和2都是给定数组,这个是1-9里面选数字,其实也能被看作是数组,每个数字只能被选一次最后不仅仅要求总和等于给定值,长度也要满足要求 /* * 216. 组合总和 III * 2020/9/11 * medium */ public List<List<Integer>> comb

2020-09-11 21:40:42

40. 组合总和 II

40. 组合总和 II难度:中等题目描述解题思路和组合总和的区别是:1、这个每个数字只能选一次,所以下次要从i+1开始选2、可能有重复数字,所以要进行判重重复发生的情况主要是在比如说1 1 2 ,第一次选了1 2,第二次还能再选1 2,就重复了。关键在于不同递归深度的数字不能一样,可以用同一个语句来实现巧妙的判重:if(i != cur && candidates[i] == candidates[i-1])continue;/* * 40. 组合总和 II

2020-09-11 21:02:06

39. 组合总和

39. 组合总和难度:中等这个月是回溯专题嘛题目描述解题思路回溯+剪枝,套模板的题/* * 39. 组合总和 * 2020/9/9 */ public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList&

2020-09-09 10:11:06

416. 分割等和子集 0/1背包问题

416. 分割等和子集难度:中等就是很经典的0/1背包问题,背包容量有限,对于每个物品要么全选要么不选,而且每个位置只能选一次,看最后能不能装满背包题目描述解题思路1、二维dpdp[i][j]表示前i个物品能不能组合成等于j的先计算target,就是整个数组和的一半,然后开始装背包初始化第一列,就是不管多少个物品都能组成容量为0的背包状态转移方程:dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i-1]];对于每个位置要么选要么不选,不选就是dp[i-1

2020-09-08 16:03:49

77. 组合 回溯+剪枝

77. 组合难度:中等题目描述解题思路1、自己写的憨憨思路就是用全排列的代码+剪枝,每次只往里面添加更大的数字但是其实可以不用这样public List<List<Integer>> combine(int n, int k) { List<List<Integer>> res = new LinkedList<>(); if(n == 0 || k == 0) return res

2020-09-08 10:05:20

347. 前 K 个高频元素

347. 前 K 个高频元素难度:中等题目描述解题思路搞得花里胡巧,还不是top k问题嘛就是多了个用hashmap统计频次的操作/* * 347. 前 K 个高频元素 * 2020/9/7 * medium */ public int[] topKFrequent(int[] nums, int k) { HashMap<Integer, Integer> hashMap = new

2020-09-07 21:04:37

60. 第k个排列 回溯法+数学法

60. 第k个排列难度:中等题目描述解题思路1、回溯法就是很正常的全排列,然后设置一个计数位,如果count == k,就提前终止递归过程/* * 60. 第k个排列 * 2020/9/5 * medium */ int count1 = 0; String res = ""; public String getPermutation(int n, int k) { StringBuild

2020-09-05 10:42:35

486. 预测赢家

486. 预测赢家难度:中等题目描述解题思路1、记忆化递归每次做出一个选择之后,比如1 4 2 19选了1,那对方可以选19,我只能选4,对方选2,我就输了选19,那对方选2,我选4,就赢了大概的递归代码是: //做出这一轮选择之后,还要让下一轮对手拿到的比较小 //这一轮选左边的 int num1 = nums[low] + Math.min(predictHelper(nums,low+1,high-1,memo), predictHelper(nums,low+2,high,

2020-09-01 17:44:29

841. 钥匙和房间 DFS

841. 钥匙和房间难度:中等题目描述解题思路就是很正常的图搜索,看看能不能全部访问到BFS和DFS都行,但是我对dfs不太熟,就用dfs写啦/* * 841. 钥匙和房间 * 2020/8/31 * medium */ public boolean canVisitAllRooms(List<List<Integer>> rooms) { int n = rooms.size(); bo

2020-08-31 21:42:09

541. 反转字符串 II

541. 反转字符串 II难度:简单题目描述解题思路类似k个一组反转链表那样 /* * 541. 反转字符串 II * 2020/8/30 * easy */ public String reverseStr(String s, int k) { char[] str = s.toCharArray(); for (int i = 0; i < str.length; i

2020-08-30 12:13:49

557. 反转字符串中的单词 III

557. 反转字符串中的单词 III难度:简单今天周末居然是简单题题目描述解题思路很友好了,只有空格,直接spilt/* * 557. 反转字符串中的单词 III * 2020/8/30 * easy */ public String reverseWords3(String s) { String[] words = s.split(" "); StringBuilder sb =

2020-08-30 10:33:33

剑指 Offer 30. 包含min函数的栈

剑指 Offer 30. 包含min函数的栈难度:简单题目描述解题思路因为栈是先进后出,出栈是有一定规律的,不是随机的,所以每个元素在入栈的时候其实就已经确定当前最小的元素是哪个,所以可以在入栈的时候顺便保存最小元素信息。可以用两个栈来进行同步,但是也可以只用一个栈import java.lang.Integer;import java.util.Stack;class Node{ int val; int min; public Node(int v,int m) { val

2020-08-29 17:33:54

214. 最短回文串

214. 最短回文串难度:困难题目描述解题思路发现一个问题,substring害挺慢的,一开始用substring老超时,后来改成直接用下标之后就不超时了渣渣不会KMP和马拉车,直接暴力法得了困难+1 积分+10public String shortestPalindrome(String s) { char[] str = s.toCharArray(); String right = ""; //找最长回文前缀 for (int i = str.length

2020-08-29 17:06:27

47. 全排列 II 回溯

47. 全排列 II难度:中等题目描述解题思路全排列1是没有重复数字生成全排列,这个是有重复数字。先复习一下没有重复数字的写法:public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = new ArrayList<>(); List<Integer> temp = new ArrayList<>(); b

2020-08-28 21:52:57

17. 电话号码的字母组合 DFS

17. 电话号码的字母组合难度:中等最近好多DFS回溯的题欸题目描述解题思路回溯其实就是暴力递归遍历,一般如果是求所有可能的排列这种,大概就是用回溯做模板:backtracking() { if (终止条件) { 存放结果; } for (枚举同一个位置的所有可能性,可以想成节点孩子的数量) { 递归,处理节点; backtracking(); 回溯,撤销处理结果 }}对于这个题,用一个S

2020-08-28 21:03:44

332. 重新安排行程 DFS欧拉回路

332. 重新安排行程难度:中等好几天前的每日一题,偷懒今天才写题目描述解题思路主要思想大概是先建图,然后从起点开始dfs吗,但是和传统回溯不同,在递归到最后的时候才把这次结果加入到结果集合里,并且要逆序插入/* * 332. 重新安排行程 * 2020/8/27 * medium */ public List<String> findItinerary(List<List<String>> t

2020-08-28 20:42:28

657. 机器人能否返回原点

657. 机器人能否返回原点难度:简单好久不见的简单题题目描述解题思路1、模拟走的过程/* * 657. 机器人能否返回原点 * 2020/8/28 */ public boolean judgeCircle(String moves) { int x = 0,y = 0; for (int i = 0; i < moves.length(); i++) { char mo

2020-08-28 17:55:27

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。