<BackTracking> permutation 254 47 60
254. Factor Combinations
class Solution {
    public List<List<Integer>> getFactors(int n) {
        List<List<Integer>> res = new ArrayList<>();
        //corner case
        if(n < 4) return res;
        dfs(n, 2, res, new ArrayList<Integer>());
        return res;
    }
    private void dfs(int n, int index, List<List<Integer>> res, List<Integer> subset){
        if(n == 1){
            if(subset.size() > 1){
                res.add(new ArrayList<Integer>(subset));
            }
            return;
        }
        //拆解
        for(int i = index; i <= n; i++){
            if(i > n / i) break;
            if(n % i == 0){
                subset.add(i);
                dfs(n / i, i, res, subset);
                subset.remove(subset.size() - 1);
            }
        }
        subset.add(n);
        dfs(1, n, res, subset);
        subset.remove(subset.size() - 1);
    }
}
47. Permutations II
有重复元素: gren tea
nums[i] == nums[i - 1] && !visited[i - 1] continue. 两数相等直接跳过。 !visited[i - 1] 如果前面的数字没选取过,则不能选后面这个相同的数字
//排列(雨露均沾)
//nums[i] == nums[i - 1] && !visited[i - 1] continue. 两数相等直接跳过
class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
//corner case
if(nums == null || nums.length == 0) return res;
Arrays.sort(nums);
boolean[] visited = new boolean[nums.length];
for(int i = 0; i < nums.length; i++){
visited[i] = false;
}
dfs(nums, res, new ArrayList<Integer>(), visited);
return res;
} private void dfs(int[] nums, List<List<Integer>> res, List<Integer> subset, boolean[] visited){
if(subset.size() == nums.length){
res.add(new ArrayList<Integer>(subset));
return;
}
for(int i = 0; i < nums.length; i++){
if(visited[i]) continue;
if(i >= 1 && nums[i] == nums[i - 1] && !visited[i - 1]) continue;
subset.add(nums[i]);
visited[i] = true;
dfs(nums, res, subset, visited);
subset.remove(subset.size() - 1);
visited[i] = false;
} }
}
60. Permutation Sequence
例: n = 4, k = 14。
k 转化为 第k个数的下标,则k--。 eg: k = 13(只需做一次)
1.每次第一顺位的数值 :at = k / (n - 1)!。 at = 13 / 3! = 2。
第二顺位数字的位置: k = k % (n - 1)!。 k = 13 % 3! = 1。 ans = 3。 对于以3为开头的6个数字中,第二顺位数字排在第2位。
2. at = k / (n - 1)!。 at = 1 / 2! = 0。 k''的排第2,剩下数字的周期是 2!。
k = k % (n - 1)。 k = 1 % 2! = 1。 ans = 31。
3. at = k / 1!。 at = 1 / 1 = 1。
k = k % 1!。 k = 1 % 1 = 0。 ans = 314。
4。 at = k / 1。 at = 0。 ans =3142。
class Solution {
    public String getPermutation(int n, int k) {
        List<String> table = new LinkedList<>(map(n));
        if(n == 1) return table.get(0);
        k--;
        String ans = "";
        while(n > 0){
            int kth = kth(n--);
            int at = k / kth;
            k %= kth;
            ans += table.get(at);
            table.remove(at);
        }
        return ans;
    }
    public List<String> map(int n){
        String s = "1,2,3,4,5,6,7,8,9";
        List<String> list = Arrays.asList(s.split(","));
        return list;
    }
    public int kth(int n){
        int t = 1;
        for(int i = 1; i < n; i++){
            t *= i;
        }
        return t;
    }
}
<BackTracking> permutation 254 47 60的更多相关文章
- LeetCode All in One 题目讲解汇总(持续更新中...)
		
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
 - All LeetCode Questions List 题目汇总
		
All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...
 - LeetCode All in One 题目讲解汇总(转...)
		
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通 ...
 - Pandas的高级操作
		
pandas数据处理 1. 删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True keep参数: ...
 - 获取文本的编码类型(from logparse)
		
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
 - PROJ4初探(转并整理格式)
		
PROJ4初探(转并整理格式) Proj4是一个免费的GIS工具,软件还称不上. 它专注于地图投影的表达,以及转换.采用一种非常简单明了的投影表达--PROJ4,比其它的投影定义简单,但很明显.很容易 ...
 - ZAM 3D 制作简单的3D字幕 流程(二)
		
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
 - Google的IP地址一览表,加上代理服务器
		
Bulgaria 93.123.23.1 93.123.23.2 93.123.23.3 93.123.23.4 93.123.23.5 93.123.23.6 93.123.23.7 93.123. ...
 - google(转帖)
		
本帖最后由 qiushui_007 于 2014-6-10 16:14 编辑 IP Addresses of Google Global Cachewww.kookle.co.nr Bulgaria ...
 
随机推荐
- # Spring 练习ioc 、aop
			
Spring 练习 通过学习spring的基础知识,了解了Spring为了降低Java开发的复杂性,采取了以下4种关键策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: ...
 - 不用输入ssh -i命令行即可携带pem文件快速登录的方法
			
如果要登录的服务器只允许pem认证 每次输入ssh -i xxxx.pem 用户@ip 地址 就很烦 这里有个一劳永逸的方法: 进入到自己的用户目录,例如/home/me 把pem文件放在当前目录 ...
 - ASP.NET Core 中基于 API Key 对私有 Web API 进行保护
			
这两天遇到一个应用场景,需要对内网调用的部分 web api 进行安全保护,只允许请求头账户包含指定 key 的客户端进行调用.在网上找到一篇英文博文 ASP.NET Core - Protect y ...
 - MySQL下载和安装教程
			
1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community Server进行下载 ...
 - 源码学习之Spring (系统架构简单解析)
			
Spring Framework 系统架构总览图 Spring Framework的模块依赖关系图 Spring Framework各个模块功能说明 Spring核心模块 模块名称 主要功能 Spri ...
 - Shell脚本中的while getopts用法小结
			
getpots是Shell命令行参数解析工具,旨在从Shell Script的命令行当中解析参数.getopts被Shell程序用来分析位置参数,option包含需要被识别的选项字符,如果这里的字符后 ...
 - 序列化禁止使用Optional
			
1: 概论 Optional 是Java8用来改变java引发NPE的解决办法,但是不是绝对的解决办法 2: 例子: 很多博文一上来就给力以下使用例子 @Data public class User ...
 - SqlServer  -----   根据查询语句创建视图
			
我们都知道视图的本质就是查询语句,那么就可以根据查询语句创建视图, 前提 知道视图的组成,已经写好的sql 语句,多表或单表的查询语句,将查询语句变成视图. 所以视图可以由单表,多表或视图加表构成. ...
 - 一些常见的http状态码
			
HTTP状态码是服务器和客户端之间交流信息的语言,下面列出一些常见的HTTP状态码. 1XX系列 指定客户端应相应的某些动作,代表请求已被接受,需要继续处理.由于在HTTP/1.0协议中没有定义任何1 ...
 - 解决ie下vue列表数据不能即时刷新的问题
			
项目上要兼容IE浏览器(客户要求),发现之前在谷歌浏览器下,操作(增删改查)列表后列表能即时刷新(双向绑定),IE下却不行. 自己调试一下发现,在IE11下,如果GET请求请求相同的URL,默认会使用 ...