博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]--60. Permutation Sequence
阅读量:6591 次
发布时间:2019-06-24

本文共 2184 字,大约阅读时间需要 7 分钟。

The set [1,2,3,…,n] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order,

We get the following sequence (ie, for n = 3):

1."123"2."132"3."213"4."231"5."312"6."321"

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

前面做过很多个这样类似题,所以很快就能想到找下一个字串。

public String getPermutation(int n, int k) {        if (n == 1)            return "1";        int[] nums = new int[n];        for (int i = 0; i < n; i++)            nums[i] = i + 1;        for (int i = 1; i < k; i++) {            nums = getNextPermutation(nums);        }        String str = "";        for (int i = 0; i < nums.length; i++) {            str += nums[i];        }        return str;    }    public int[] getNextPermutation(int[] nums) {        int i = nums.length - 1;        while (i > 0 && nums[i] < nums[i - 1])            i--;        int second = Integer.MAX_VALUE, secondIndex = Integer.MAX_VALUE;        for (int j = nums.length - 1; j >= i; j--)            if (nums[j] > nums[i - 1] && nums[j] < second) {                second = nums[j];                secondIndex = j;            }        int temp = nums[i - 1];        nums[i - 1] = nums[secondIndex];        nums[secondIndex] = temp;        Arrays.sort(nums, i, nums.length);        return nums;    }

虽然AC了,不过效率实在是很低,我又找到了一个效率很高的,beat88%的算法。

public String getPermutation(int n, int k) {        StringBuilder sb = new StringBuilder();        boolean[] used = new boolean[n];        k = k - 1;        int factor = 1;        for (int i = 1; i < n; i++) {            factor *= i;        }        for (int i = 0; i < n; i++) {            int index = k / factor;            k = k % factor;            for (int j = 0; j < n; j++) {                if (used[j] == false) {                    if (index == 0) {                        used[j] = true;                        sb.append((char) ('0' + j + 1));                        break;                    } else {                        index--;                    }                }            }            if (i < n - 1) {                factor = factor / (n - 1 - i);            }        }        return sb.toString();    }

转载地址:http://equio.baihongyu.com/

你可能感兴趣的文章
Agent admitted failure to sign using the key
查看>>
grep 应用
查看>>
我的友情链接
查看>>
Linux实验室 CentOS关机大法
查看>>
一行命令获取当前JVM所有可设置的参数以及当前默认值
查看>>
spring与struts2 mvc共存web.xml简单配置
查看>>
Python web爬虫
查看>>
Python捕捉命令输出、错误输出及赋值命令到变量的方法
查看>>
js解析json
查看>>
详解性能调优命令
查看>>
Linux mint 14下的powerDNS+mysql+powerAdmin搭建个性DNS域名解析服务器
查看>>
Red Hat EnterPrise Linux 5.4下web服务器的综合使用(普通站点、虚拟主机、安全性、...
查看>>
squirrelmail+change_sqlpass 认证 问题
查看>>
hive优化--增加减少map数
查看>>
重建二叉树
查看>>
ERP计划参数如何在线更新
查看>>
3.8Python数据处理篇之Numpy系列(八)---Numpy的梯度函数
查看>>
LVS+Keepalived实现高可用集群
查看>>
我的友情链接
查看>>
hadoop管理命令——fsck
查看>>