给定一个代表正十进制整数的数字字符串S ,任务是找到获得总和S所需的正十进制二进制数的最小数目。
Deci-Binary Numbers: Decimal numbers consisting of only 0s and 1s as its digits.
例子:
Input: S = “31”
Output: 3
Explanation: S can be represented as the sum of minimum of 3 Deci-Binary numbers {10, 10, 11}.
Input: S = “82734”
Output: 8
Explanation: S can be represented as sum minimum of 8 Deci-Binary numbers {11111, 11111, 10111, 10101, 10100, 10100, 10100, 10000}.
方法:可以根据以下观察结果解决给定问题:
Suppose X Deci-Binary numbers are needed to obtain the sum S. To make the sum of X Deci-Binary numbers at i-th place equal to a digit d in S, there must be exactly d Deci-Binary numbers among X numbers having 1 at the ith position.
Therefore, the minimum number of Deci-Binary numbers required to obtain a sum S is equal to the maximum value of any of the digits of S.
因此,要解决该问题,请遍历字符串S的字符并找到其中存在的最大位数。
下面是上述方法的实现:
C++
// C++ Program to implemeent
// the above approach
#include
using namespace std;
// Function to find the count of minimum
// Deci-Binary numbers required to obtain S
int minimum_deci_binary_number(string s)
{
// Stores the minimum count
int m = INT_MIN;
// Iterate over the string s
for (int i = 0; i < s.size(); i++) {
// Convert the char to its
// equivalent integer
int temp = s[i] - '0';
// If current character is
// the maximum so far
if (temp > m) {
// Update the maximum digit
m = temp;
}
}
// Print the required result
return m;
}
// Driver Code
int main()
{
string S = "31";
cout << minimum_deci_binary_number(S);
return 0;
}
Java
// Java program to implemeent
// the above approach
class GFG{
// Function to find the count of minimum
// Deci-Binary numbers required to obtain S
static int minimum_deci_binary_number(String s)
{
// Stores the minimum count
int m = Integer.MIN_VALUE;
// Iterate over the string s
for(int i = 0; i < s.length(); i++)
{
// Convert the char to its
// equivalent integer
int temp = s.charAt(i) - '0';
// If current character is
// the maximum so far
if (temp > m)
{
// Update the maximum digit
m = temp;
}
}
// Print the required result
return m;
}
// Driver Code
public static void main (String[] args)
{
String S = "31";
System.out.println(minimum_deci_binary_number(S));
}
}
// This code is contributed by AnkThon
Python3
# Python3 Program to implemeent
# the above approach
# Function to find the count of minimum
# Deci-Binary numbers required to obtain S
def minimum_deci_binary_number(s):
# Stores the minimum count
m = -10**19
# Iterate over the string s
for i in range(len(s)):
# Convert the char to its
# equivalent integer
temp = ord(s[i]) - ord('0')
# If current character is
# the maximum so far
if (temp > m):
# Update the maximum digit
m = temp
# Prthe required result
return m
# Driver Code
if __name__ == '__main__':
S = "31"
print(minimum_deci_binary_number(S))
# This code is contributed by mohit kumar 29
C#
// C# program to implemeent
// the above approach
using System;
class GFG
{
// Function to find the count of minimum
// Deci-Binary numbers required to obtain S
static int minimum_deci_binary_number(string s)
{
// Stores the minimum count
int m = int.MinValue;
// Iterate over the string s
for(int i = 0; i < s.Length; i++)
{
// Convert the char to its
// equivalent integer
int temp = s[i] - '0';
// If current character is
// the maximum so far
if (temp > m)
{
// Update the maximum digit
m = temp;
}
}
// Print the required result
return m;
}
// Driver Code
public static void Main (String[] args)
{
string S = "31";
Console.WriteLine(minimum_deci_binary_number(S));
}
}
// This code is contributed by AnkThon
3
时间复杂度: O(N)
辅助空间: O(N)