comments | difficulty | edit_url | rating | source | tags | ||||
---|---|---|---|---|---|---|---|---|---|
true |
简单 |
1288 |
第 417 场周赛 Q1 |
|
Alice 和 Bob 正在玩一个游戏。最初,Alice 有一个字符串 word = "a"
。
给定一个正整数 k
。
现在 Bob 会要求 Alice 执行以下操作 无限次 :
- 将
word
中的每个字符 更改 为英文字母表中的 下一个 字符来生成一个新字符串,并将其 追加 到原始的word
。
例如,对 "c"
进行操作生成 "cd"
,对 "zb"
进行操作生成 "zbac"
。
在执行足够多的操作后, word
中 至少 存在 k
个字符,此时返回 word
中第 k
个字符的值。
注意,在操作中字符 'z'
可以变成 'a'
。
示例 1:
输入:k = 5
输出:"b"
解释:
最初,word = "a"
。需要进行三次操作:
- 生成的字符串是
"b"
,word
变为"ab"
。 - 生成的字符串是
"bc"
,word
变为"abbc"
。 - 生成的字符串是
"bccd"
,word
变为"abbcbccd"
。
示例 2:
输入:k = 10
输出:"c"
提示:
1 <= k <= 500
我们可以使用一个数组
最后返回
时间复杂度
class Solution:
def kthCharacter(self, k: int) -> str:
word = [0]
while len(word) < k:
word.extend([(x + 1) % 26 for x in word])
return chr(ord("a") + word[k - 1])
class Solution {
public char kthCharacter(int k) {
List<Integer> word = new ArrayList<>();
word.add(0);
while (word.size() < k) {
for (int i = 0, m = word.size(); i < m; ++i) {
word.add((word.get(i) + 1) % 26);
}
}
return (char) ('a' + word.get(k - 1));
}
}
class Solution {
public:
char kthCharacter(int k) {
vector<int> word;
word.push_back(0);
while (word.size() < k) {
int m = word.size();
for (int i = 0; i < m; ++i) {
word.push_back((word[i] + 1) % 26);
}
}
return 'a' + word[k - 1];
}
};
func kthCharacter(k int) byte {
word := []int{0}
for len(word) < k {
m := len(word)
for i := 0; i < m; i++ {
word = append(word, (word[i]+1)%26)
}
}
return 'a' + byte(word[k-1])
}
function kthCharacter(k: number): string {
const word: number[] = [0];
while (word.length < k) {
word.push(...word.map(x => (x + 1) % 26));
}
return String.fromCharCode(97 + word[k - 1]);
}