leetcode
jia2018
这个作者很懒,什么都没留下…
展开
-
1.两数之和
1.两数之和1.两数之和方法一:暴力枚举方法二:哈希表方法三:哈希表优化1.两数之和方法一:暴力枚举class Solution { public int[] twoSum(int[] nums, int target) { int n = nums.length; for (int i = 0; i < n - 1; i++){ for (int j = i + 1; j < n; j++){原创 2020-12-05 21:12:21 · 54 阅读 · 0 评论 -
11.盛最多水的容器
11.盛最多水的容器11.盛最多水的容器方法一:暴力双指针法方法二:前后双指针法11.盛最多水的容器方法一:暴力双指针法class Solution { public int maxArea(int[] height) { int max = 0; for (int i = 0; i < height.length - 1; i++) { for (int j = i + 1; j < height.length; j++)原创 2020-12-06 12:24:39 · 76 阅读 · 0 评论 -
15.三数之和
15.三数之和15.三数之和方法一:排序+双指针15.三数之和方法一:排序+双指针class Solution { public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); List<List<Integer>> res = new ArrayList<>(); for (int k = 0; k <原创 2020-12-07 12:35:16 · 62 阅读 · 0 评论 -
17. 电话号码的字母组合
17. 电话号码的字母组合17. 电话号码的字母组合方法一:回溯17. 电话号码的字母组合方法一:回溯class Solution { public List<String> letterCombinations(String digits) { if (digits == null || digits.length() == 0) { return new ArrayList<>(); } Map原创 2021-09-30 17:45:27 · 69 阅读 · 0 评论 -
20. 有效的括号
20. 有效的括号20. 有效的括号方法一:栈20. 有效的括号方法一:栈class Solution { public boolean isValid(String s) { int n = s.length(); if (n % 2 == 1) { return false; } Map<Character, Character> pairs = new HashMap<>();原创 2020-12-17 12:47:16 · 51 阅读 · 0 评论 -
21. 合并两个有序链表
21. 合并两个有序链表21. 合并两个有序链表方法一:递归方法二:迭代21. 合并两个有序链表方法一:递归class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) { return l2; } else if (l2 == null) { return l1; } else原创 2021-01-21 15:00:55 · 50 阅读 · 0 评论 -
22. 括号生成
22. 括号生成22. 括号生成方法一:深度优先遍历方法二:广度优先遍历22. 括号生成方法一:深度优先遍历class Solution { public List<String> generateParenthesis(int n) { List<String> list = new ArrayList<String>(); generate(list, 0, 0, n, ""); return list;原创 2021-02-25 14:43:43 · 45 阅读 · 0 评论 -
24. 两两交换链表中的节点
24. 两两交换链表中的节点24. 两两交换链表中的节点方法一:递归方法二:迭代24. 两两交换链表中的节点方法一:递归class Solution { public ListNode swapPairs(ListNode head) { if(head == null || head.next == null) { return head; } ListNode newHead = head.next;原创 2020-12-07 15:46:07 · 72 阅读 · 0 评论 -
25. K 个一组翻转链表
25. K 个一组翻转链表25. K 个一组翻转链表方法一:模拟(官方)方法二:图解k个一组翻转链表(精选)(待解决)25. K 个一组翻转链表方法一:模拟(官方)class Solution { public ListNode reverseKGroup(ListNode head, int k) { ListNode hair = new ListNode(0); hair.next = head; ListNode pre = hair;原创 2020-12-15 14:03:29 · 49 阅读 · 0 评论 -
26. 删除排序数组中的重复项
26. 删除排序数组中的重复项26. 删除排序数组中的重复项方法:双指针法26. 删除排序数组中的重复项方法:双指针法class Solution { public int removeDuplicates(int[] nums) { if (nums.length == 0) { return 0; } int i = 0; for (int j = 1; j < nums.length; j++)原创 2021-01-20 19:37:07 · 43 阅读 · 0 评论 -
42. 接雨水
42. 接雨水42. 接雨水方法 1:暴力方法 2:动态编程方法 3:栈的应用方法 4:使用双指针42. 接雨水方法 1:暴力public int trap(int[] height) { int ans = 0; int size = height.length; for (int i = 1; i < size - 1; i++) { int max_left = 0, max_right = 0; for (int j = i; j原创 2020-12-07 21:06:43 · 51 阅读 · 0 评论 -
46. 全排列
46. 全排列46. 全排列方法一:回溯46. 全排列方法一:回溯 public List<List<Integer>> permute(int[] nums) { int len = nums.length; //使用一个动态数组保存所有可能的全排列 List<List<Integer>> res = new ArrayList<>(); if (len == 0) {原创 2021-08-19 11:24:23 · 64 阅读 · 0 评论 -
47. 全排列 II
47. 全排列 II47. 全排列 II回溯搜索 + 剪枝47. 全排列 II回溯搜索 + 剪枝 public List<List<Integer>> permuteUnique(int[] nums) { int len = nums.length; List<List<Integer>> res = new ArrayList<>(); if (len == 0) {原创 2021-08-19 14:47:18 · 65 阅读 · 0 评论 -
49. 字母异位词分组
49. 字母异位词分组49. 字母异位词分组方法一:排序方法二:计数49. 字母异位词分组方法一:排序class Solution { public List<List<String>> groupAnagrams(String[] strs) { if(strs.length == 0){ return new ArrayList(); } Map<String, List<Strin原创 2021-01-22 21:58:59 · 51 阅读 · 0 评论 -
50. Pow(x, n)
50. Pow(x, n)50. Pow(x, n)方法一:快速幂 + 递归方法二:快速幂 + 迭代50. Pow(x, n)方法一:快速幂 + 递归class Solution { public double myPow(double x, int n) { long N = n; return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N); } public double quickM原创 2021-09-27 17:13:16 · 66 阅读 · 0 评论 -
51. N 皇后
51. N 皇后51. N 皇后方法一:普通回溯51. N 皇后方法一:普通回溯class Solution { private int n; private List<List<String>> res; private List<String> board; public List<List<String>> solveNQueens(int n) { this.n = n;原创 2021-10-06 15:00:42 · 81 阅读 · 0 评论 -
66. 加一
66. 加一66. 加一Java 数学解题66. 加一Java 数学解题class Solution { public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; i--) { digits[i]++; digits[i] = digits[i] % 10; if (digits[i] != 0) {原创 2021-01-22 14:12:47 · 52 阅读 · 0 评论 -
70.爬楼梯
70.爬楼梯70.爬楼梯方法一:动态规划滚动数组优化方法二:递归70.爬楼梯方法一:动态规划滚动数组优化class Solution { public int climbStairs(int n) { if (n <= 2) { return n; } int a1 = 1, a2 = 2, a3 = 3; for (int i = 3; i < n + 1; i++) {原创 2020-12-07 12:32:52 · 49 阅读 · 0 评论 -
77. 组合
77. 组合77. 组合方法一:根据搜索起点画出二叉树优化:分析搜索起点的上界进行剪枝方法二:按照每一个数选与不选画出二叉树77. 组合方法一:根据搜索起点画出二叉树 public List<List<Integer>> combine(int n, int k) { List<List<Integer>> res = new ArrayList<>(); if (k <= 0 || n <原创 2021-08-18 16:37:04 · 74 阅读 · 0 评论 -
78. 子集
78. 子集78. 子集方法一:迭代法实现子集枚举方法二:递归法实现子集枚举78. 子集方法一:迭代法实现子集枚举class Solution { List<Integer> t = new ArrayList<>(); List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>> subsets(int[] n原创 2021-09-28 16:44:27 · 77 阅读 · 0 评论 -
88. 合并两个有序数组
88. 合并两个有序数组88. 合并两个有序数组方法一 : 合并后排序方法二 : 双指针 / 从前往后方法三 : 双指针 / 从后往前88. 合并两个有序数组方法一 : 合并后排序class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { System.arraycopy(nums2, 0, nums1, m, n); Arrays.sort(nums1); }}作者:LeetC原创 2021-01-21 22:26:07 · 75 阅读 · 0 评论 -
94. 二叉树的中序遍历
94. 二叉树的中序遍历94. 二叉树的中序遍历方法一:递归方法二:迭代94. 二叉树的中序遍历方法一:递归class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); inorder(root, res); return res;原创 2021-02-06 13:49:39 · 51 阅读 · 0 评论 -
98. 验证二叉搜索树
98. 验证二叉搜索树98. 验证二叉搜索树方法一: 递归方法二:中序遍历方法三:中序遍历(递归)98. 验证二叉搜索树方法一: 递归class Solution { public boolean isValidBST(TreeNode root) { return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE); } public boolean isValidBST(TreeNode node, long原创 2021-02-25 21:05:34 · 49 阅读 · 0 评论 -
102. 二叉树的层序遍历
102. 二叉树的层序遍历102. 二叉树的层序遍历方法一:广度优先搜索102. 二叉树的层序遍历方法一:广度优先搜索class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ret = new ArrayList<List<Integer>>(); if (root原创 2021-02-08 18:01:38 · 50 阅读 · 0 评论 -
104. 二叉树的最大深度
104. 二叉树的最大深度104. 二叉树的最大深度方法一:深度优先搜索方法二:广度优先搜索104. 二叉树的最大深度方法一:深度优先搜索class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int leftHeight = maxDepth(root.left);原创 2021-02-26 12:59:10 · 55 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树105. 从前序与中序遍历序列构造二叉树方法一:递归105. 从前序与中序遍历序列构造二叉树方法一:递归class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { int preLen = preorder.length; int inLen = inorder.length; if (preLen != inLen原创 2021-03-15 22:14:14 · 142 阅读 · 0 评论 -
111. 二叉树的最小深度
111. 二叉树的最小深度111. 二叉树的最小深度方法一:深度优先搜索方法二:广度优先搜索111. 二叉树的最小深度方法一:深度优先搜索class Solution { public int minDepth(TreeNode root) { if (root == null) { return 0; } if (root.left == null && root.right == null) {原创 2021-02-26 14:55:55 · 73 阅读 · 0 评论 -
126. 单词接龙 II
126. 单词接龙 II126. 单词接龙 II方法:广度优先遍历、深度优先遍历(回溯)126. 单词接龙 II方法:广度优先遍历、深度优先遍历(回溯)class Solution { public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) { List<List<String>> re原创 2021-10-12 16:31:08 · 180 阅读 · 0 评论 -
127. 单词接龙
127. 单词接龙127. 单词接龙方法一:广度优先遍历方法二:双向广度优先遍历127. 单词接龙方法一:广度优先遍历class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { //第 1 步:先将 wordList 放到哈希表里,便于判断某个单词是否在 wordList 里 Set<String>原创 2021-10-09 17:55:29 · 76 阅读 · 0 评论 -
141. 环形链表
141. 环形链表141. 环形链表方法一:哈希表方法二:快慢指针141. 环形链表方法一:哈希表public class Solution { public boolean hasCycle(ListNode head) { HashSet<ListNode> seen = new HashSet<>(); while (head != null) { if (!seen.add(head)) {原创 2020-12-15 11:23:56 · 46 阅读 · 0 评论 -
142. 环形链表 II
142. 环形链表 II方法一:哈希表方法二:快慢指针方法一:哈希表public class Solution { public ListNode detectCycle(ListNode head) { ListNode pos = head; Set<ListNode> visited = new HashSet<ListNode>(); while (pos != null) { if (vis原创 2020-12-15 12:51:22 · 56 阅读 · 0 评论 -
144. 二叉树的前序遍历
144. 二叉树的前序遍历144. 二叉树的前序遍历方法一:递归方法二:迭代144. 二叉树的前序遍历方法一:递归class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); preorder(root, res); return res原创 2021-02-06 14:13:46 · 86 阅读 · 0 评论 -
145. 二叉树的后序遍历
145. 二叉树的后序遍历145. 二叉树的后序遍历方法一:递归方法二:迭代145. 二叉树的后序遍历方法一:递归class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); postorder(root, res); return r原创 2021-02-08 17:20:38 · 55 阅读 · 0 评论 -
155. 最小栈
155. 最小栈155. 最小栈方法一:辅助栈155. 最小栈方法一:辅助栈class MinStack { Deque<Integer> xStack; Deque<Integer> minStack; /** initialize your data structure here. */ public MinStack() { xStack = new LinkedList<Integer>();原创 2020-12-17 13:08:56 · 51 阅读 · 0 评论 -
169. 多数元素
169. 多数元素169. 多数元素方法一:哈希表方法二:排序方法三:随机化方法四:分治方法五:Boyer-Moore 投票算法169. 多数元素方法一:哈希表class Solution { private Map<Integer, Integer> countNums(int[] nums) { Map<Integer, Integer> counts = new HashMap<>(); for (int num : n原创 2021-09-30 15:11:54 · 139 阅读 · 0 评论 -
189. 旋转数组
189. 旋转数组189. 旋转数组方法一:使用额外的数组方法二:环状替换方法三:数组翻转方法四:暴力替换189. 旋转数组方法一:使用额外的数组class Solution { public void rotate(int[] nums, int k) { int n = nums.length; int[] newArr = new int[n]; for (int i = 0; i < n; ++i) { ne原创 2021-01-20 22:50:53 · 50 阅读 · 0 评论 -
200. 岛屿数量
200. 岛屿数量200. 岛屿数量思路一:深度优先遍历DFS思路二:广度优先遍历 BFS方法三:并查集200. 岛屿数量思路一:深度优先遍历DFSclass Solution { public int numIslands(char[][] grid) { int count = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].le原创 2021-02-16 15:34:39 · 60 阅读 · 0 评论 -
206. 反转链表
206. 反转链表206. 反转链表方法一:迭代方法二:递归206. 反转链表方法一:迭代class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while (curr != null) { ListNode nextTemp = curr.next;原创 2020-12-07 15:15:45 · 53 阅读 · 0 评论 -
226. 翻转二叉树
226. 翻转二叉树226. 翻转二叉树方法一:递归(自底向上)方法二:递归(自顶向下)方法三:迭代226. 翻转二叉树方法一:递归(自底向上)class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } TreeNode left = invertTree(root.left);原创 2021-02-25 19:50:15 · 50 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先236. 二叉树的最近公共祖先方法一:后序遍历 DFS236. 二叉树的最近公共祖先方法一:后序遍历 DFSclass Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null || root == p || root == q) { return root;原创 2021-03-15 21:27:34 · 91 阅读 · 0 评论