列表

详情


3304. 找出第 K 个字符 I

Alice 和 Bob 正在玩一个游戏。最初,Alice 有一个字符串 word = "a"

给定一个正整数 k

现在 Bob 会要求 Alice 执行以下操作 无限次 :

例如,对 "c" 进行操作生成 "cd",对 "zb" 进行操作生成 "zbac"

在执行足够多的操作后, word至少 存在 k 个字符,此时返回 word 中第 k 个字符的值。

注意,在操作中字符 'z' 可以变成 'a'

 

示例 1:

输入:k = 5

输出:"b"

解释:

最初,word = "a"。需要进行三次操作:

示例 2:

输入:k = 10

输出:"c"

 

提示:

相似题目

字母移位

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: char kthCharacter(int k) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2024-10-01 15:14:34

func kthCharacter(k int) byte {
	return byte('a' + bits.OnesCount(uint(k-1)))
}

func kthCharacter2(k int) byte {
	k--
	ans := byte('a')
	for i := bits.Len(uint(k)) - 1; i >= 0; i-- {
		if k >= 1<<i { // k 在右半边
			ans++
			k -= 1 << i
		}
	}
	return ans
}

java 解法, 执行用时: 0 ms, 内存消耗: 40.2 MB, 提交时间: 2024-10-01 15:14:09

class Solution {
    public char kthCharacter1(int k) {
        k--;
        char ans = 'a';
        for (int i = 31 - Integer.numberOfLeadingZeros(k); i >= 0; i--) {
            if (k >= (1 << i)) { // k 在右半边
                ans++;
                k -= (1 << i);
            }
        }
        return ans;
    }

    public char kthCharacter(int k) {
        return (char) ('a' + Integer.bitCount(k - 1));
    }
}

cpp 解法, 执行用时: 4 ms, 内存消耗: 7.1 MB, 提交时间: 2024-10-01 15:13:39

class Solution {
public:
    char kthCharacter1(long long k) {
        k--;
        char ans = 'a';
        for (int i = __lg(k); i >= 0; i--) {
            if (k >= (1 << i)) { // k 在右半边
                ans++;
                k -= (1 << i);
            }
        }
        return ans;
    }

    char kthCharacter(long long k) {
        return 'a' + __builtin_popcount(k - 1);
    }
};

python3 解法, 执行用时: 41 ms, 内存消耗: 16.4 MB, 提交时间: 2024-10-01 15:13:05

class Solution:
    def kthCharacter(self, k: int) -> str:
        k -= 1
        inc = 0
        for i in range(k.bit_length() - 1, -1, -1):
            if k >= 1 << i:  # k 在右半边
                inc += 1
                k -= 1 << i
        return ascii_lowercase[inc]

    def kthCharacter2(self, k: int) -> str:
        return ascii_lowercase[(k - 1).bit_count()]

上一题