Das ganze Problem klingt wie:Effizientere „Zuerst K Zahlen, dass ihre stelligen Summe S ist“ Algorithmus
„Wir haben zwei Zahlen auf Eingabe, K und S Wir sind auf Ausgabe drucken möchten erste (niedrigste) K-Nummern, während ihre Zahl ist genau S "
Es gibt einen einfachen naiven Algorithmus, um ein solches Problem zu lösen (die ich konstruieren und finden konnte). Es ist Prinzip, eine Funktion zu haben bigint digitSum (i), (Ich schreibe bigint, weil S ist sowieso nicht begrenzt, wie ich will nur effektiver Algorithmus ...), die Ziffer Summe der Argumentnummer zurückgeben wird. Wir werden von Nummer 0 ausgehen und immer um 1 erhöhen, während wir diese Zahlen in die Funktion einfügen. Wenn die Funktion die gleiche Summe wie S zurückgibt, drucken Sie diese Nummer und fahren Sie fort, bis Sie K Zahlen drucken.
Code Funktion ist hier:
bigint digitSum(number){
bigint total = 0;
while(number > 0)
{
total += number % 10;
number /= 10;
}
return total;
}
Algorithmus asymptotische Komplexität in Big-O ist als
ist die Komplexität der Zahlen 0,1,2,3 Suche Trog ... n, bis wir finden genau K benötigten Zahlen und
ist Komplexität unserer Funktion stelligen Summe zu finden, da es dividieren Zahl immer um 10.
gibt es einen Algorithmus oder so, wie es effizienter zu machen ?? Vielen Dank!
Wenn Sie Arbeitscode haben, den Sie kritisieren oder verbessern möchten, sollten Sie auf http://codereview.stackexchange.com schreiben. –