🎈归属专栏:深夜咖啡配算法
🚗个人主页:Jammingpro
🐟记录一句:上一篇博客这里好像没改,那就不改了。
文章目录
- LeetCode-1689. 十-二进制数的最少数目
- 🚗题目
- 🚆题目描述
- 🚆题目示例
- 🚆提示
- 🚗题解
LeetCode-1689. 十-二进制数的最少数目
标签:贪心、字符串
🚗题目
🚆题目描述
如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 。例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是。
给你一个表示十进制整数的字符串 n ,返回和为 n 的 十-二进制数 的最少数目。
🚆题目示例
示例 1:
输入:n = “32”
输出:3
解释:10 + 11 + 11 = 32
示例 2:
输入:n = “82734”
输出:8
示例 3:
输入:n = “27346209830709182346”
输出:9
🚆提示
1 <= n.length <= 1 0 5 10^5 105
n 仅由数字组成
n 不含任何前导零并总是表示正整数
🚗题解
这道题存在一定的规律,从题目给的示例进行分析即可。👇
示例1中的"32",也是说,个位需要2个"1",十位需要3个"1"。由于构成"32"的数的各个数位只能是"0"或者"1",若十位想要达到3个"1",则至少需要3个数十位为1,若个位想达到2个"1",则至少需要2个数十位为1。为了满足各个数位的要求,因此我们至少需要3个数,3个数的十位均位1,3个数中2个个位为1,一个个位为0。
上述分析可以知道,要想构成某个数,只要看其哪个数位最缺1(即该数位的值最大),其缺1的数量,就是整个数需要的十-二进制数 的最少数目。因此,我们可以得到如下代码:
class Solution {
public:
int minPartitions(string n) {
int size = n.size();
int ret = 0;
for(int i = 0; i < size; i++)
ret = max(ret, n[i] - '0');
return ret;
}
};
文章结语:这道题是一道中等题,震惊了!!
🎈欢迎进入深夜咖啡配算法专栏,查看更多文章。
如果上述内容有任何问题,欢迎在下方留言区指正b( ̄▽ ̄)d