sujet
Si un nombre décimal ne contient pas de zéros non significatifs et que le nombre de chaque chiffre est 0 ou 1, alors le nombre est un nombre décimal-binaire. Par exemple, 101 et 1100 sont tous deux des nombres à dix binaires, mais 112 et 3001 ne le sont pas.
Donnez-vous une chaîne n représentant un entier décimal et retournez le nombre minimum de nombres décimaux-binaires dont la somme est n.
Exemple 1:
Entrée: n = "32"
Sortie: 3
Explication: 10 + 11 + 11 = 32
Exemple 2:
Entrée: n = "82734"
Sortie: 8
Exemple 3:
Entrée: n = "27346209830709182346"
Sortie: 9
rapide:
1 <= n.length <= 105
n 仅由数字组成
n 不含任何前导零并总是表示正整数
Source: LeetCode
Résolution de problème
modèle
int minPartitions(char * n){
}
Idées de résolution de problèmes
En fait, cette question peut être comprise comme demandant quel est le plus grand nombre dans la chaîne d'entrée, le plus grand n'est que 9, donc vous pouvez établir une boucle arrière
Nous pouvons décider de terminer la traversée de la boucle en jugeant s'il y a des éléments dans la boucle. Chaque fois que nous traversons, nous devons convertir les caractères en nombres, ce qui est n [i] - '0';
Si le 9 est détecté à l'avance, vous pouvez sauter directement, en pensant qu'il n'y aura pas plus de 9, ce qui économise du travail inutile.
Code
int minPartitions(char * n){
int times=0;
for(int i=0;n[i]!='\0';i++)
{
times=fmax(times,n[i]-'0');
if(times==9)return times;
}
return times;
}
Bien entendu, la boucle for peut également être implémentée en un temps.