leetcode排列,求第k个排列
stl 中的下一个排列在写一遍忘了
写个1个多小时,使用递归写的,错误就在我使用一个list保存当前剩下的数,然后利用k/(n-1)!的阶乘就是删除的数字,但进过观察,
比如 list={1,2,3}
分成3组:
1 {2,3}
2 {1,3}
3 {1,2}
确定位于哪个组,然后确定位于哪个组的第几个nyoj 511。
求第3个排列 ,3%2=1,删除 list就是第3个数3,其实呢是第2个树2 ,所以 计算方法为 (k-1)/(n-1)!
另外一个对于下一组,k%(n-1)!也不行啊, 第4个, 4%2!=0,其实应该为第二2.
这个思路和nyoj的小球下落很像(nyoj 511)
 public class Solution {
     private String ans="";
     public int calu(int n)
     {
         if(n==0) return 1;
         int sum=1;
         for(int i=2;i<=n;i++)
         {
             sum*=i;
         }
         return sum;
     }
     public String getPermutation(int n, int k) {
         ArrayList<Integer> arry=new ArrayList<Integer>();
         for(int i=1;i<=n;i++)
         {
             arry.add(i);
         }
         get(k,calu(n-1),arry);
         return ans;
     }
     public void get(int k,int n1,ArrayList<Integer> list)
     {
         if(list.size()==1)
         {
             ans+=list.remove(0);
             return;
         }
            int a=list.remove((k-1)/n1);
            ans+=a;
            int te=k%n1;
            if(te==0) te=n1;
         get(te,n1/list.size(),list);
     }
 }
leetcode排列,求第k个排列的更多相关文章
- 代码题(45)— 下一个排列、第k个排列
		
1.31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只 ...
 - 【LeetCode 60】第k个排列
		
题目链接 [题解] 逆康托展开. 考虑康托展开的过程. K = ∑v[i]*(n-i)! 其中v[i]表示在a[i+1..n]中比a[i]小的数字的个数 (也即未出现的数字中它排名第几(从0开始)) ...
 - 60. Permutation Sequence(求全排列的第k个排列)
		
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
 - LeetCode 笔记21 生成第k个排列
		
题目是这样的: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all ...
 - LeetCode 60 第K个排列
		
题目: 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "13 ...
 - LeetCode(60): 第k个排列
		
Medium! 题目描述: 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" ...
 - LeetCode:第K个排列【60】
		
LeetCode:第K个排列[60] 题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: &quo ...
 - LeetCode 中级 - 第k个排列(60)
		
可以用数学的方法来解, 因为数字都是从1开始的连续自然数, 排列出现的次序可以推 算出来, 对于n=4, k=15 找到k=15排列的过程: 1 + 对2,3,4的全排列 (3!个) 2 + 对1,3 ...
 - LeetCode 60. 第k个排列(Permutation Sequence)
		
题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" "1 ...
 
随机推荐
- MongoDB的查询
			
一.Find操作 二.分页和排序 三.游标的使用 一.Find查询 事前准备:插入如下数据 db.Students.insert([ { _id:1, name:"Zhao", a ...
 - 网络编程(学习整理)---3--(Udp)FeiQ实现广播消息群发
			
1.广播群发消息: 这里使用的任然是UDP协议,使用方法还是比较简单的! 我就记录一下需要注意的一些地方(笔记): (1)这里是在局域网内,借用FeiQ聊天软件,编写一段程序,实现对局域网内的每一个登 ...
 - 一段C++代码想到的问题
			
今天在学习<Unix环境高级编程>,第七章进程环境给出了一个进程的内存分布示意图,从下往上依次为“正文段->初始化数据->未初始化数据(默认初始化为0)->堆(从低地址到 ...
 - ENC28J60 + M430G2553,用uip搭建http服务器,解决“在XP系统下可以访问,在Win7下不能访问”的问题
			
近日,用ENC28J60,在M430G2553上搭建一个简单的HTTP服务器,结果发现在XP系统下可以访问,在Win7下不能访问,非常奇葩的问题. 通过抓包,如下图,计算机(IP地址为192.168. ...
 - python细节
			
1.assert 断言语句,可判断一句话真假,若为假会抛出AssertionError. eg. assert 1==1 assert 1==2则AssertionError 2.单引号双引号 ...
 - php读取excel,以及php打包文件夹为zip文件
			
1.把文件下载到本地,放在在Apache环境下2.d.xlsx是某游戏的服务器名和玩家列表,本程序只适合此种xlsx文件结构,其他结构请修改index.php源码3.访问zip.php的功能是把生成的 ...
 - PHPUnit测试
			
今天单元测试测到一个有点坑的小问题: public function testUpdataStatusFailForNegative() { // // Remove the following li ...
 - Python【第十篇】协程、异步IO
			
大纲 Gevent协程 阻塞IO和非阻塞IO.同步IO和异步IO的区别 事件驱动.IO多路复用(select/poll/epoll) 1.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coro ...
 - pip assert_source_matches_version(self)版本验证报错Source in %s has version %s, which satisfies requirement %s的解决方式
			
在win8.1下为了安装flask模块,开始安装pip,结果发生了上篇博客里面的错误ntpath join(path, *paths) 发生UnicodeDecodeError.解决之后继续发现版本验 ...
 - iOS: 学习笔记, 使用FMDatabase操作sqlite3
			
使用FMDatabase操作sqlite3数据库非常简单和方便 // // main.m // iOSDemo0602_sqlite3 // // Created by yao_yu on 14-6- ...