
回溯法
ZQQ~BK
这个作者很懒,什么都没留下…
展开
-
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。方法一:暴力法将数组中的元素进行全排列,找出排列后最小的一个组合import java.util.ArrayList;public class Solution { public String PrintMinNumber(int [] numbers) { if(numbers==null原创 2020-08-10 16:17:53 · 207 阅读 · 0 评论 -
矩阵中的路径
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。思路分析:通过visit标记已经访问过的元素,遍历数组的每个节点判断是否以该节点开始,通过回溯找出是否存在给定字符串public class Solution { int[][] visit; public boolean hasPath(char[]原创 2020-06-06 21:48:01 · 188 阅读 · 0 评论 -
幂集
题目描述:幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。方法一:回溯法class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> res=new ArrayList<>(); dfs(nums,0,res,new ArrayList<&原创 2020-05-24 19:56:07 · 1880 阅读 · 0 评论 -
括号生成
题目描述:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。方法一:暴力法,递归每种情况,判断是否括号匹配class Solution { public List<String> generateParenthesis(int n) { List<String> res=new LinkedList<...原创 2020-03-01 00:05:53 · 90 阅读 · 0 评论 -
无重复字符串的排列组合
题目描述:无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同class Solution { public String[] permutation(String S) { List<String> res=new ArrayList<>(); func(S.toCharArray(),0,S.length(),res); int len=res.size(); Stri原创 2020-05-24 17:45:23 · 496 阅读 · 0 评论 -
二进制手表
题目描述:二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。思路分析:将表的每一个灯从0-9进行编号,然后从里面选出num个所有的组合,计算出时间,选出符合的组合class Solution { public List<String> readBinaryWatch(int num) { List<List<Integer>> tmp原创 2020-05-24 11:22:41 · 227 阅读 · 0 评论 -
字母大小写全排列
题目描述:给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。方法一:如果下一个字符 x是字母,将当前已遍历过的字符串全排列复制两份,在第一份的每个字符串末尾添加 lowercase(x),在第二份的每个字符串末尾添加 uppercase(x)。如果下一个字符 x 是数字,将 x直接添加到每个字符串的末尾。class Solution { public List<String> letterCasePermutati原创 2020-05-23 22:35:58 · 385 阅读 · 0 评论