class Solution {
public:
string kthLuckyNumber(int k) {
}
};
2802. 找出第 K 个幸运数字
我们知道 4
和 7
是 幸运 数字。同时,如果一个数字只包含幸运数字,那么它被称为幸运数字。
给定一个整数 k
,返回第 k
个幸运数字,并将其表示为一个 字符串 。
示例 1:
输入:k = 4 输出:"47" 解释:第一个幸运数字是 4,第二个是 7,第三个是 44,第四个是 47。
示例 2:
输入:k = 10 输出:"477" 解释:按递增顺序列出的幸运数字为: 4, 7, 44, 47, 74, 77, 444, 447, 474, 477。 因此第10个幸运数字是477。
示例 3:
输入:k = 1000 输出:"777747447" 解释:第 1000 个幸运数字是 777747447。
提示:
1 <= k <= 109
原站题解
typescript 解法, 执行用时: 152 ms, 内存消耗: 49.8 MB, 提交时间: 2023-10-17 20:28:19
function kthLuckyNumber(k: number): string { const binaryStr = (k + 1).toString(2).slice(1); const luckyNumberStr = binaryStr.replace(/0/g, '4').replace(/1/g, '7'); return luckyNumberStr; };
java 解法, 执行用时: 7 ms, 内存消耗: 42.1 MB, 提交时间: 2023-10-17 20:27:23
class Solution { public String kthLuckyNumber(int k) { k++; StringBuilder ans = new StringBuilder(); while(k > 1){ if((k & 1) == 0){ ans.append(4); }else{ ans.append(7); } k >>= 1; } return ans.reverse().toString(); } }
python3 解法, 执行用时: 80 ms, 内存消耗: 16 MB, 提交时间: 2023-10-17 20:26:52
class Solution: def kthLuckyNumber1(self, k: int) -> str: return ''.join(['4' if c=='0' else '7' for c in bin(k+1)[3:]]) def kthLuckyNumber(self, k: int) -> str: srt, sm, p = 1, 2, 4 while k > sm: sm += p srt += 1 p *= 2 s = bin(k-1-sm+p//2)[2:].rjust(srt,"0") return s.replace("0","4").replace("1","7")