comments | difficulty | edit_url | tags | |||
---|---|---|---|---|---|---|
true |
中等 |
|
我们知道 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
根据题目描述,一个幸运数只包含数字
我们初始化
如果
时间复杂度
class Solution:
def kthLuckyNumber(self, k: int) -> str:
n = 1
while k > 1 << n:
k -= 1 << n
n += 1
ans = []
while n:
n -= 1
if k <= 1 << n:
ans.append("4")
else:
ans.append("7")
k -= 1 << n
return "".join(ans)
class Solution {
public String kthLuckyNumber(int k) {
int n = 1;
while (k > 1 << n) {
k -= 1 << n;
++n;
}
StringBuilder ans = new StringBuilder();
while (n-- > 0) {
if (k <= 1 << n) {
ans.append('4');
} else {
ans.append('7');
k -= 1 << n;
}
}
return ans.toString();
}
}
class Solution {
public:
string kthLuckyNumber(int k) {
int n = 1;
while (k > 1 << n) {
k -= 1 << n;
++n;
}
string ans;
while (n--) {
if (k <= 1 << n) {
ans.push_back('4');
} else {
ans.push_back('7');
k -= 1 << n;
}
}
return ans;
}
};
func kthLuckyNumber(k int) string {
n := 1
for k > 1<<n {
k -= 1 << n
n++
}
ans := []byte{}
for n > 0 {
n--
if k <= 1<<n {
ans = append(ans, '4')
} else {
ans = append(ans, '7')
k -= 1 << n
}
}
return string(ans)
}
function kthLuckyNumber(k: number): string {
let n = 1;
while (k > 1 << n) {
k -= 1 << n;
++n;
}
const ans: string[] = [];
while (n-- > 0) {
if (k <= 1 << n) {
ans.push('4');
} else {
ans.push('7');
k -= 1 << n;
}
}
return ans.join('');
}