回溯相关题目整理

原则: 1. 回溯函数需要path、ans参数 2. 允许包含重复数字,则处理前一定要先排序 3. 只有全排列需要记录used[i],因为需要区分重复的元素 Generate Parentheses 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:[“((()))”,”(()())”,”(())()”,”()(())”,”()()()”] 示例 2: 输入:n = 1 输出:[“()”] 提示: * 1 <= n <= 8 1 2 3 4 5 6 7 8 9 10 11 12
阅读更多

leetcode 45.跳跃游戏II

https://leetcode.com/problems/jump-game-ii/ 45.跳跃游戏 II 你被给了一个长度为 n 的整数数组 nums,索引从 0 开始。你最初位于 nums[0]。 数组中的每个元素 nums[i] 代表从索引 i 出发的最大向前跳跃长度。换句话说,如果你在 nums[i],你可以跳到任何 nums[i + j],其中: * 0 <= j <= nums[i] 且 * i + j < n 返回到达 nums[n - 1] 的最小跳跃次数。测试用例生成保证你可以到达 nums[n - 1]。 示例 1: 输入:nums = [2,3,1,1
阅读更多

leetcode 31. 下一个排列

https://leetcode.com/problems/next-permutation/description/ 31.下一个排列 整数数组的排列是将其成员排列成序列或线性顺序。 * 例如,对于arr = [1,2,3],arr的所有排列如下:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]。 整数数组的下一个排列是它的整数下一个字典序排列。更正式地说,如果将数组的所有排列按字典序排序放入一个容器中,那么该数组的下一个排列就是排序容器中紧随其后的排列。如果无法进行这种排列,则数组必须重新排列为最低可能的顺序(即按升序排序)。
阅读更多

leetcode 33.在旋转排序数组中搜索

https://leetcode.com/problems/search-in-rotated-sorted-array/description/ 33.旋转有序数组中的搜索[中等] 有一个整数数组nums,按升序排序(值各不相同)。在传递给您的函数之前,nums可能被一个未知的枢轴索引k(1 <= k < nums.length)旋转,使得得到的数组为[nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](索引从0开始)。例如,[0,1,2,4,5,6,7]可能在枢轴索引3处旋转并变为[4,5,6,7,0,1,
阅读更多

多线程顺序打印问题

三个线程分别打印 A,B,C 三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC….”的字符串 使用Lock 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 import java.util.concurrent.locks.ReentrantLock; public class ABC { static class ABCPrinter { p
阅读更多