一亩三分地

 找回密码 注册账号

扫描二维码登录本站


北美版丁香园
美国和加拿大
疫情地图实时动态追踪

热门职场讲座
Career in Tech
职场晋升之路

Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 303|回复: 1
收起左侧

[Leetcode] leetcode 60 permutation-sequence 的问题

[复制链接] |试试Instant~ |刷题, leetcode
我的人缘0

分享帖子到朋友圈
fish1994 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (1)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
这道题先贴上答案吧
[Bash shell] 纯文本查看 复制代码
public String getPermutation(int n, int k) {
        List<Integer> res = new ArrayList<>();
        for(int i = 1; i <= n; i++) {
            res.add(i);
        }
        
        int[] fact = new int[n];
        fact[0] = 1;
        for(int i = 1; i < n; i++) {
            fact[i] = fact[i - 1] * i;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = n; i > 0; i--) {
            int index = k/fact[i - 1];
            k = k%fact[i - 1];
            sb.append(res.get(index));
            res.remove(index);
        }
        return sb.toString();
    }



完全想不通为啥k一定要等于k - 1..是因为res的原因吗?


上一篇:分享一下自己刷题的经验
下一篇:刷题的困惑
我的人缘0
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (12)
 
 
0% (0)    👎
直接用DFS求出第k个排列会超时。
因为原序列已排序且没有重复元素,所以找到第k个排列数可以不用DFS,直接找到每一位数的值。当序列元素为[1, n]时,当确定了头m个数时有(n - m)!种排列,如n = 9且k = 136371时,当确定了第一个数后,还有8!种排列,而由于136371 = 8! + 8! + 8! + 15411,所以可以确定第一个数为4。当确定了两个数后,还有7!种排列,由于15411 = 7! + 7! + 7! + 291,因此可以确定第二个数为5,注意此时4已经用掉了。如此继续下去,直到确定所有数字。

评分

参与人数 1大米 +1 收起 理由
fish1994 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|||一亩三分地

GMT+8, 2020-4-2 02:09

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表