列表

详情


1415. 长度为 n 的开心字符串中字典序第 k 小的字符串

一个 「开心字符串」定义为:

比方说,字符串 "abc""ac","b" 和 "abcbabcbcb" 都是开心字符串,但是 "aa""baa" 和 "ababbc" 都不是开心字符串。

给你两个整数 n 和 k ,你需要将长度为 n 的所有开心字符串按字典序排序。

请你返回排序后的第 k 个开心字符串,如果长度为 n 的开心字符串少于 k 个,那么请你返回 空字符串 。

 

示例 1:

输入:n = 1, k = 3
输出:"c"
解释:列表 ["a", "b", "c"] 包含了所有长度为 1 的开心字符串。按照字典序排序后第三个字符串为 "c" 。

示例 2:

输入:n = 1, k = 4
输出:""
解释:长度为 1 的开心字符串只有 3 个。

示例 3:

输入:n = 3, k = 9
输出:"cab"
解释:长度为 3 的开心字符串总共有 12 个 ["aba", "abc", "aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba", "cbc"] 。第 9 个字符串为 "cab"

示例 4:

输入:n = 2, k = 7
输出:""

示例 5:

输入:n = 10, k = 100
输出:"abacbabacb"

 

提示:

 

原站题解

去查看

class Solution {
public:
string getHappyString(int n, int k) {
}
};
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

python3 解法, 执行用时: 44 ms, 内存消耗: 15 MB, 提交时间: 2022-11-26 17:05:27

class Solution:
def getHappyString(self, n: int, k: int) -> str:
s = 3 * 2 ** (n - 1)
if k > s: return ""
last, res = None, ""
for i in range(n):
s = s // (2 if last else 3)
md = ((k - 1) // s) % (2 if last else 3)
j = 0
for c in "abc":
if c == last: continue
if j == md:
res += c
last = c
break
j += 1
return res

golang 解法, 执行用时: 8 ms, 内存消耗: 1.9 MB, 提交时间: 2022-11-26 17:05:06

func getHappyString(n int, k int) string {
var ans string
nums:=[]byte{'a','b','c'}
path:=[]byte{}
var dfs func(int)
dfs = func(idx int){
if len(path)==n{
if k--;k==0{
ans = string(path)
return
}
}else if len(path)>n{
return
}
for i:=0;i<len(nums);i++{
if len(path)==0||path[len(path)-1]!=nums[i]{
path= append(path,nums[i])
dfs(idx+1)
path=path[:len(path)-1]
}
}
}
dfs(0)
return ans
}

上一题