摘要:
78. 子集 给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。 解集不能包含重复的子集。你可以按任意顺序返回解集。 输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 输入:nums = [ 阅读全文
摘要:
进程和线程 进程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 线程 阅读全文
摘要:
93. 复原 IP 地址 给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从s获得的有效 IP 地址 。你可以按任何顺序返回答案。 有效 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。 例如:"0.1.2.201" 阅读全文
摘要:
131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文串 。返回 s 所有可能的分割方案。 回文串是正着读和反着读都一样的字符串。 输入:s = "aab" 输出:[["a","a","b"],["aa","b"]] 输入:s = "a" 输出:[["a"]] 思路 阅读全文
摘要:
40. 组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用一次。 说明: 所有数字(包括目标数)都是正整数 解集不能包含重复的组合 输入: 阅读全文
摘要:
77. 组合 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 思路 本题这是回溯法的经典题目。 每次从集合中选取元素,可选择的范围随着 阅读全文
摘要:
什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 回溯是递归的副产品,只要有递归就会有回溯。 所以回溯函数也就是递归函数,指的都是一个函数。 回溯法的效率 虽然回溯法很难,很不好理解,但是回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案。 回溯法并 阅读全文
摘要:
669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在唯一的答案。 所以 阅读全文
摘要:
236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 输入:root = [3,5, 阅读全文
摘要:
783. 二叉搜索树节点最小距离 给你一个二叉搜索树的根节点 root ,返回树中任意两不同节点值之间的最小差值。 注意:本题与 530 相同 输入:root = [4,2,6,1,3] 输出:1 思路 二叉搜索树采用中序遍历,其实就是一个有序数组。 在递归遍历的过程中记录前后两个指针,就可以直接计 阅读全文