刷题前唠嗑
LeetCode?启动!!!
题目:下一个更大的数值平衡数
题目链接:2048. 下一个更大的数值平衡数
题目描述
代码与解题思路
func nextBeautifulNumber(n int) int {
for i := n+1; ; i++ { // 枚举
cnt := [10]int{}
for tmp := i; tmp > 0; tmp/=10 {
cnt[tmp%10]++
}
isBeautifulNumber := true
for j := i; j > 0; j/=10 { // 判断是不是最小数值平衡数
if j%10 != cnt[j%10] {
isBeautifulNumber = false
break
}
}
if isBeautifulNumber == true {
return i
}
}
}
今天的每日一题不太难,主要是读懂题目的给的:最小数值平衡数 是个什么东西,就拿题目的样例来说
- 22,他的 2 有两个,他是最小数值平衡数
- 1333,他的 1 有一个,3 有三个,他是最小数值平衡数
- 3133,他的 1 有一个,3 有三个,他是最小数值平衡数
- 444422,他的 4 有四个,2 有两个,他是最小数值平衡数
通过这四个样例大概就知道什么是最小数值平衡数了,然后题目就是要我们求他给出的数的下一个最小数值平衡数,那最简单的方法就是往后枚举,然后判断,也就是我的做法。
官方解法
class Solution {
public:
const vector<int> balance {
1, 22, 122, 212, 221, 333, 1333, 3133, 3313, 3331, 4444,
14444, 22333, 23233, 23323, 23332, 32233, 32323, 32332,
33223, 33232, 33322, 41444, 44144, 44414, 44441, 55555,
122333, 123233, 123323, 123332, 132233, 132323, 132332,
133223, 133232, 133322, 155555, 212333, 213233, 213323,
213332, 221333, 223133, 223313, 223331, 224444, 231233,
231323, 231332, 232133, 232313, 232331, 233123, 233132,
233213, 233231, 233312, 233321, 242444, 244244, 244424,
244442, 312233, 312323, 312332, 313223, 313232, 313322,
321233, 321323, 321332, 322133, 322313, 322331, 323123,
323132, 323213, 323231, 323312, 323321, 331223, 331232,
331322, 332123, 332132, 332213, 332231, 332312, 332321,
333122, 333212, 333221, 422444, 424244, 424424, 424442,
442244, 442424, 442442, 444224, 444242, 444422, 515555,
551555, 555155, 555515, 555551, 666666, 1224444
};
int nextBeautifulNumber(int n) {
return *upper_bound(balance.begin(), balance.end(), n);
}
};
打表。。。
结语
还以为官方有什么好活呢,结果是打表