leetcode做题记录0060
发布日期:2021-05-07 13:48:27 浏览次数:24 分类:原创文章

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

leetcode 0060

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

思路

这种全排列第一反应就是深搜,一开始写了一版没过,超时。

然后就稍微改了一下,第一个数字直接算出来,勉强通过。

应该有好办法的,懒得找了。

class Solution {       public String getPermutation(int n, int k) {   		int[] factorial = new int[n];		factorial[0] = 1;		for (int i = 1; i < n; i++) {   			factorial[i] = i * factorial[i - 1];		}		int first = 0;		first = k % factorial[n - 1] == 0 ? k / factorial[n - 1] : k / factorial[n - 1] + 1;		String res = String.valueOf(first);		List<String> ls = new ArrayList<String>();		dfs(n, res, ls);		return ls.get(k - (first - 1) * factorial[n - 1] - 1);	}	public void dfs(int n, String res, List<String> ls) {   		if (res.length() == n) {   			ls.add(res);			return;		}		for (int i = 1; i <= n; i++) {   			if (res.contains(String.valueOf(i))) {   				continue;			} else {   				dfs(n, res + String.valueOf(i), ls);			}		}	}}
上一篇:leetcode做题记录0061
下一篇:leetcode做题记录0059

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月07日 09时31分55秒