0
点赞
收藏
分享

微信扫一扫

0002Java程序设计-springboot在线考试系统小程序

_鱼与渔_ 2023-11-25 阅读 34

在这里插入图片描述

文章目录

LeetCode-1689. 十-二进制数的最少数目


标签:贪心、字符串


🚗题目

🚆题目描述

如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 。例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是。

给你一个表示十进制整数的字符串 n ,返回和为 n 的 十-二进制数 的最少数目。

🚆题目示例

示例 1:

示例 2:

示例 3:

🚆提示

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;
    }
};
举报

相关推荐

0 条评论