c# LeetCode刷题笔记6- 十-二进制数的最少数目
1.题目描述
如果一个十进制数字不含任何前导零,且每一位上的数字不是 0 就是 1 ,那么该数字就是一个 十-二进制数 。例如,101 和 1100 都是 十-二进制数,而 112 和 3001 不是。
给你一个表示十进制整数的字符串 n ,返回和为 n 的 十-二进制数 的最少数目。
示例 1:
输入:n = “32”
输出:3
解释:10 + 11 + 11 = 32
示例 2:
输入:n = “82734”
输出:8
示例 3:
输入:n = “27346209830709182346”
输出:9
2.解析:这道题的解题思路是求这组数字字符中的最大值,但是将一个数字字符5转换成整数变成的是十进制数字53,不是我们想要的数字5.解决办法是减去一个字符0,字符0对应的十进制数字是48,相减之后就会得到数字5.
private void button18_Click(object sender, EventArgs e)
{
string str = "56957";
int a = MinPartitions(str);
Console.WriteLine(a);
}
//目的是找到字符串中数字最大的那个字符
public int MinPartitions(string n)
{
//解法1
#region
//char s = n[0];
//int max = Convert.ToInt32(Convert.ToString(s));
//for (int i = 1; i < n.Length; i++)
//{
// int tmp = Convert.ToInt32(Convert.ToString(n[i]));
// if (max< tmp)
// {
// max = tmp;
// }
//}
//return max;
#endregion
//解法2
int max = 0;
for (int i = 0; i < n.Length; i++)
{
//int tmp = Convert.ToInt32(n[0]);//此时的tmp=53
// int e = n[0];//字符5对应53(十进制)
// int a = e - '0';//字符0对应48(十进制) 此时a的值为5
max = Math.Max(n[i] - '0', max);
}
return max;
}