【LeetCode刷题】--40.组合总和II
40.组合总和II 本题详解:回溯算法 class Solution { public List<List<Integer>> combinationSum2(int[] candidates, int target) { int len = candidates.length; List<List<Integer>> res = new ArrayList<>(); if (len == 0) { return ...
leetcode刷题日记:205. Isomorphic Strings(同构字符串)
205. Isomorphic Strings(同构字符串) 对于同构字符串来说也就是对于字符串s与字符串t,对于 s [ i ] s[i] s[i]可以映射到 t [ i ] t[i] t[i],同时对于任意 s [ k ] = s [ i ] s[k]=s[i] s[k]=s[i]都有 s [ k ] s[k] s[k]映射到 t [ k ] t[k] t[k],则 t [ k ] = t [ i ] t[k]...
【LeetCode刷题-链表】--23.合并K个升序链表
23.合并K个升序链表 方法:顺序合并 在前面已经知道合并两个升序链表的前提下,用一个变量ans来维护以及合并的链表,第i次循环把第i个链表和ans合并,答案保存到ans中 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(...
【LeetCode刷题-回溯】-- 46.全排列
46.全排列 方法:回溯法 一种通过探索所有可能的候选解来找出所有的解的算法,如果候选解被确认不是一个解,回溯法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试 使用一个标记数组表示已经填过的数 class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = new ArrayList<Li...
leetcode刷题日记:202. Happy Number( 快乐数)和203. Remove Linked List Elements(移除链表元素)
一题的解决与之前的循环链表比较类似,因为如果不是快乐数的话,在数字变化的过程中必然遇到了数字变换的循环,所以我们需要在变换的过程中判断是否遇到了循环,判断是否在一个序列中存在循环,我们可以使用与之前在leetcode刷题日记:141. Linked List Cycle(环形链表)类似的思想,让一个数每次变化两次然后一个数每次变化一次,如果存在循环,两个数必然会出现相等的情况。 可以写出代码如下: int Happy...
【LeetCode刷题】-- 8.字符串转换整数(atoi)
8.字符串转换整数(atoi) class Solution { public int myAtoi(String s) { int sign = 1; int n = s.length(); int index = 0,res = 0; while(index < n && s.charAt(index) == ' '){ index++; } //处理符号 if(index < n && (s.charAt(i...
【LeetCode刷题】-- 50.Pow(x,n)
50.Pow(x,n) 由于直接计算,会出现溢出的情况,因此使用了快速幂算法 这样每次递归都会使得指数减少一半,递归的层数为O(logn) 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 qu...
【LeetCode刷题-树】--1367.二叉树中的链表
1367.二叉树中的链表 方法:枚举 枚举二叉树中的每个节点为起点往下的路径是否与链表相匹配的路径,为了判断是否匹配设计了一个递归函数dfs(root,head),其中root表示当前匹配到的二叉树节点,head表示当前匹配到的链表节点,整个函数返回布尔值表示是否有一条该节点往下的路径与head节点开始的链表匹配,如匹配返回true,否则返回false,一共有四种情况 链表已经全部匹配完,匹配成功,返回true二叉...
【LeetCode刷题-树】-- 572.另一棵树的子树
572.另一棵树的子树 方法:深度优先搜索暴力匹配 深度优先搜索枚举root中的每一个节点,判断这个点的子树是否与subroot相等 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(in...
【LeetCode刷题-滑动窗口】-- 239.滑动窗口最大值
239.滑动窗口最大值 分析: 方法:优先队列 对于最大值,可以使用优先队列(堆),其中的大根堆可以帮助实时维护一系列元素中的最大值 在本题中,初始时,将数组nums的前k个元素放入优先队列中,每当我们向右移动窗口时,我们就可以把一个新的元素放入优先队列中,此时堆顶的元素就是堆中所有元素的最大值,然而这个最大值可能并不在滑动窗口中,在这种情况下,这个值在数组nums中的位置出现在滑动窗口左边界的左侧,因此我们后续继...