首页 > 其他分享 >【刷题笔记】60. Permutation Sequence(改)

【刷题笔记】60. Permutation Sequence(改)

时间:2023-09-23 20:01:21浏览次数:36  
标签:index used return 213 Sequence int res 60 Permutation

题目

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 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.
  • Given k will be between 1 and n! inclusive.

Example 1:

Input: n = 3, k = 3
Output: "213"

Example 2:

Input: n = 4, k = 9
Output: "2314"

题目大意

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:"123","132","213","231","312","321",给定 n 和 k,返回第 k 个排列。

解题思路

  • 用 DFS 暴力枚举,这种做法时间复杂度特别高,想想更优的解法。

参考代码

package leetcode

import (
	"fmt"
	"strconv"
)

func getPermutation(n int, k int) string {
	if k == 0 {
		return ""
	}
	used, p, res := make([]bool, n), []int{}, ""
	findPermutation(n, 0, &k, p, &res, &used)
	return res
}

func findPermutation(n, index int, k *int, p []int, res *string, used *[]bool) {
	fmt.Printf("n = %v index = %v k = %v p = %v res = %v user = %v\n", n, index, *k, p, *res, *used)
	if index == n {
		*k--
		if *k == 0 {
			for _, v := range p {
				*res += strconv.Itoa(v + 1)
			}
		}
		return
	}
	for i := 0; i < n; i++ {
		if !(*used)[i] {
			(*used)[i] = true
			p = append(p, i)
			findPermutation(n, index+1, k, p, res, used)
			p = p[:len(p)-1]
			(*used)[i] = false
		}
	}
	return
}

标签:index,used,return,213,Sequence,int,res,60,Permutation
From: https://blog.51cto.com/u_16110811/7580698

相关文章

  • 关于部分买家的主板BIOS升级操作说明,针对畅网的N5105 N6005 J6412 J6413的BIOS升级操
    说明:因为BIOS更新了,修复一些小问题,如果你有需要更新请按我的傻瓜式步骤操作。本次升级涉畅网的NAS51056005的主板和小主机V1V2V3V4V5版本的BIOS更新,本次更新bios同步更新cpu微码。更新后部分界面有些许变化。操作步骤:NAS主板部分先看下原先的bios版本,2022/08/31下面......
  • Tecplot 360 EX 2020 工程绘图注册版下载 各个版本下载
    Tecplot是一款强大的数据可视化和分析工具。它具有多种数据格式支持、高质量的可视化、多维数据分析、数据交互和探索、自定义图表和报告、与其他工具的集成、大数据处理、广泛的应用领域等特点。通过使用Tecplot,科学家、工程师和研究人员可以更好地理解数据、发现模式和趋势,并做出......
  • 春秋云镜 - CVE-2022-28060
    VictorCMSv1.0/includes/login.php存在sql注入找到页面的登录框,看介绍应该是post类型的表单注入。上sqlmap用原本的梭发现ctf的那个表是空的,换用--file-read参数从目标中读取文件拿到flag。root@Locklytemp/tmp»sqlmap-rsql.txt--file-read"/flag"--batch......
  • LC2603 收集树中金币
    利用了拓扑排序思想的趣题。答案要求统计“走过的边数”,这个不是很好统计,但是统计“哪些点不需要去”比较简单:没有金币的子树不需要去;删去1之后的叶子结点不需要去;删去1,2之后的叶子结点不需要去。可以证明,其他的点都需要去到。删去上述结点的依据是度数(都是叶子结点)......
  • CF1677D Tokitsukaze and Permutations
    好玩题。对于一个排列\(p\),进行\(k\)轮冒泡,记\(v_i=\sum_{j<i}[p_j<p_i]\),给定\(v_i\),部分值不确定,求合法的\(p\)的个数。\(p\)由\(v\)唯一确定。考虑一个个加数字进去,每次可以判断加入数字与前面数字的相对大小,于是可以确定原排列。只用研究\(v\),不用......
  • 具有高速开关、RGW80TS65EHRC11、RGW80TS65HRC11、RGW60TS65CHRC11 650V场终止沟槽型I
    1、应用太阳能逆变器UPS焊接IH功率因数校正2、规格1、RGW80TS65EHRC11IGBT沟槽型场截止650V通孔TO-247NIGBT类型:沟槽型场截止电压-集射极击穿(最大值):650V电流-集电极(Ic)(最大值):80A电流-集电极脉冲(Icm):160A不同 Vge、Ic时 Vce(on)(最大值):1.9V@15V,40A功率......
  • 记录小程序 errno":600001,"errMsg":"request:fail -118 报错问题
    "(inpromise)MiniProgramError\n{"errno":600001,"errMsg":"request:fail-118:net::ERR_CONNECTION_TIMED_OUT","data":{"message":"连接服务器失败!","result":"error"}}\nObject"......
  • HDU 4609
    题目链接description给定一个长度为\(n\)的序列\(A\),元素值域大小为\(10^5\)。求从中任选三个不同位置的元素,以它们的值为三边能够成三角形的概率。solution设有\(cnt\)种选三个不同的元素构成三角形的方案,则答案显然为\(\dfrac{6cnt}{n(n-1)(n-2)}\)。\(a,b,c(a\leq......
  • 小夜灯CB证书CE证书LVD证书EMC证书FCC证书EN60598-2-12
    小夜灯检测报告找我办理。小夜灯GB7000.212报告,小夜灯IEC60598-2-12报告小夜灯EN60598-2-12报告小夜灯CE证书小夜灯FCC证书小夜灯ROHS证书小夜灯REACH证书小夜灯EN62471报告小夜灯SAA证书小夜灯CB证书小夜灯TUV证书小夜灯COC证书小夜灯LVD证书小夜灯EMC证书小夜灯I......
  • Xor-Subsequence (字典树优化DP)
     思路;明显的是,后一个i要从前面一个进行更新, 利用dpeasy版本ai<=200,发现当n>=300时,对他是没有影响的,这样比较好记录ans进行更新,利用数据结构处理hard版本拆位,利用字典树dp,把参数变成相同的参数,a[i]和i,(比大小:前K位一样第K+1位不一样......