如果一个十进制数字不含任何前导零,且每一位上的数字不是 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
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.三目运算符 ? :
-
唯一有3个 *** 作数的运算符,是右结合性的,即自右向左结合。嵌套的时候自右向左,比如a ? b : c ? d : e将按**a ? b : (c ? d : e)**执行
-
它的一般形式为:<表达式1> ? <表达式2> : <表达式3>;
"?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式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;
}
};
(多少有些技巧性)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)