十-二进制的最少数目

十-二进制的最少数目,第1张

十-二进制的最少数目 题目:

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCCTWbM9-1635579212850)(C:Users吕育权AppDataRoamingTyporatypora-user-imagesimage-20211029160701699.png)]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partitioning-into-minimum-number-of-deci-binary-numbers

预备知识: 1.基于范围的for循环(c++11支持)
for(char& ch: s )//直接进行对字符串s进行遍历 *** 作,ch为当前遍历到的字符
for (char c : s)//先对字符串s拷贝一遍再进行遍历,时间显然比上一个长

 //还可以用来遍历数组,同上
int a[6] = { 0,1,2,3,4,5,6 };
	for (int &i : a)
2.三目运算符 ? :
  1. 唯一有3个 *** 作数的运算符,是右结合性的,即自右向左结合。嵌套的时候自右向左,比如a ? b : c ? d : e将按**a ? b : (c ? d : e)**执行

  2. 它的一般形式为:<表达式1> ? <表达式2> : <表达式3>;

    "?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。

  3. 通常情况下,表达式1是关系表达式或逻辑表达式,用于描述条件表达式中的条件,表达式2和表达式3可以是常量,变量或表达式.

    //比如
    x=ab,则x=b
    
思路及算法:

乍一看有被题目吓到,但观察示例发现,输出的刚好就是字符串里最大的那个数字,然后结合十-二进制数的性质便发现,由于字符串数字上的每一位都是由0或1相加起来的,这时候便不难知道,最少的数目便是由最大的那位数字决定

//例如
12321=
11111
01110
00100   

这样我们就知道,直接找到最大的数字即可,这里用for()进行遍历

class Solution {
public:
    int minPartitions(string n) 
    {
        int res = 1;
        for (char& ch: n) 
        {
        	if(res==9)return res;//如果已经找到9,可直接结束遍历
            res = max(res, ch - '0');//这里可以用res = res>(ch-'0')?res:(ch-'0');
        }
        return res;
    }
};

(多少有些技巧性)
:(ch-‘0’);
}
return res;
}
};

(多少有些技巧性)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4950211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存