Найменше число з заданою цифрою та сумою
Враховуючи два цілі числа s і р. знайти найменший Можливе число, яке має саме D цифри і a сума цифр дорівнює s .
Повернути номер як нитка . Якщо такого числа не існує повернення '-1' .
Приклади:
Введення: s = 9 d = 2
Вихід: 18
Пояснення: 18 - найменше можливе число із сумою цифр = 9 і загальними цифрами = 2.Введення: s = 20 d = 3
Вихід: 299
Пояснення: 299 - це найменше можливе число із сумою цифр = 20 і загальними цифрами = 3.Введення: s = 1 d = 1
Вихід: 1
Пояснення: 1 - найменше можливе число із сумою цифр = 1 і загальною цифрою = 1.
Таблиця змісту
- [Брут -силовий підхід] itate послідовно - o (d*(10^d)) час і o (1) простір
- [Очікуваний підхід] Використання жадібної техніки - O (d) Час і O (1) Простір
[Брут -силовий підхід] itate послідовно - o (d*(10^d)) час і o (1) простір
C++Оскільки числа є послідовними Підхід грубої сили oterates з найменший d-значний номер до найбільший перевірка кожного. Для кожного числа ми обчислюємо сума його цифр і повернути перший дійсний матч, забезпечуючи вибрано найменше можливе число. Якщо не існує дійсного числа, ми повертаємося '-1' .
// C++ program to find the smallest d-digit // number with the given sum using // a brute force approach #include using namespace std ; string smallestNumber ( int s int d ) { // The smallest d-digit number is 10^(d-1) int start = pow ( 10 d - 1 ); // The largest d-digit number is 10^d - 1 int end = pow ( 10 d ) - 1 ; // Iterate through all d-digit numbers for ( int num = start ; num <= end ; num ++ ) { int sum = 0 x = num ; // Calculate sum of digits while ( x > 0 ) { sum += x % 10 ; x /= 10 ; } // If sum matches return the number // as a string if ( sum == s ) { return to_string ( num ); } } // If no valid number is found return '-1' return '-1' ; } // Driver Code int main () { int s = 9 d = 2 ; cout < < smallestNumber ( s d ) < < endl ; return 0 ; }
Java // Java program to find the smallest d-digit // number with the given sum using // a brute force approach import java.util.* ; class GfG { static String smallestNumber ( int s int d ) { // The smallest d-digit number is 10^(d-1) int start = ( int ) Math . pow ( 10 d - 1 ); // The largest d-digit number is 10^d - 1 int end = ( int ) Math . pow ( 10 d ) - 1 ; // Iterate through all d-digit numbers for ( int num = start ; num <= end ; num ++ ) { int sum = 0 x = num ; // Calculate sum of digits while ( x > 0 ) { sum += x % 10 ; x /= 10 ; } // If sum matches return the number // as a string if ( sum == s ) { return Integer . toString ( num ); } } // If no valid number is found return '-1' return '-1' ; } // Driver Code public static void main ( String [] args ) { int s = 9 d = 2 ; System . out . println ( smallestNumber ( s d )); } }
Python # Python program to find the smallest d-digit # number with the given sum using # a brute force approach def smallestNumber ( s d ): # The smallest d-digit number is 10^(d-1) start = 10 ** ( d - 1 ) # The largest d-digit number is 10^d - 1 end = 10 ** d - 1 # Iterate through all d-digit numbers for num in range ( start end + 1 ): sum_digits = 0 x = num # Calculate sum of digits while x > 0 : sum_digits += x % 10 x //= 10 # If sum matches return the number # as a string if sum_digits == s : return str ( num ) # If no valid number is found return '-1' return '-1' # Driver Code if __name__ == '__main__' : s d = 9 2 print ( smallestNumber ( s d ))
C# // C# program to find the smallest d-digit // number with the given sum using // a brute force approach using System ; class GfG { static string smallestNumber ( int s int d ) { // The smallest d-digit number is 10^(d-1) int start = ( int ) Math . Pow ( 10 d - 1 ); // The largest d-digit number is 10^d - 1 int end = ( int ) Math . Pow ( 10 d ) - 1 ; // Iterate through all d-digit numbers for ( int num = start ; num <= end ; num ++ ) { int sum = 0 x = num ; // Calculate sum of digits while ( x > 0 ) { sum += x % 10 ; x /= 10 ; } // If sum matches return the number // as a string if ( sum == s ) { return num . ToString (); } } // If no valid number is found return '-1' return '-1' ; } // Driver Code public static void Main () { int s = 9 d = 2 ; Console . WriteLine ( smallestNumber ( s d )); } }
JavaScript // JavaScript program to find the smallest d-digit // number with the given sum using // a brute force approach function smallestNumber ( s d ) { // The smallest d-digit number is 10^(d-1) let start = Math . pow ( 10 d - 1 ); // The largest d-digit number is 10^d - 1 let end = Math . pow ( 10 d ) - 1 ; // Iterate through all d-digit numbers for ( let num = start ; num <= end ; num ++ ) { let sum = 0 x = num ; // Calculate sum of digits while ( x > 0 ) { sum += x % 10 ; x = Math . floor ( x / 10 ); } // If sum matches return the number // as a string if ( sum === s ) { return num . toString (); } } // If no valid number is found return '-1' return '-1' ; } // Driver Code let s = 9 d = 2 ; console . log ( smallestNumber ( s d ));
Випуск
18
[Очікуваний підхід] Використання жадібної техніки - O (d) Час і O (1) Простір
Підхід забезпечує найменшу цифру ненульовий Отже, ми резерв 1 для нього та розподілити решту суми з Праворуч зліва формувати найменше можливе число. З Жадливий підхід Допомагає в розміщенні найбільших можливих значень (до 9) на Правильні позиції щоб зберегти число невеликим.
Кроки для реалізації вищезазначеної ідеї:
- Перевірте обмеження, щоб забезпечити дійсна сума s може бути сформований за допомогою D цифри інакше повернутися '-1' .
- Ініціалізувати результат як струна D '0 і резерв 1 для Найбільш ліва цифра за рахунок зменшення S на 1 .
- Проходити з Праворуч зліва і поставити Найбільша можлива цифра ( <= 9) Під час оновлення s відповідно.
- Якщо s <= 9 Розмістіть його значення в поточному положенні та встановити S = 0 Щоб зупинити подальші оновлення.
- Призначити Найбільш ліва цифра додавши Залишився s щоб переконатися, що він залишається ненуль .
- Перетворити результат рядок до необхідного формату та повернення це як кінцевий вихід.
// C++ program to find the smallest d-digit // number with the given sum using // Greedy Technique #include using namespace std ; string smallestNumber ( int s int d ) { // If sum is too small or too large // for d digits if ( s < 1 || s > 9 * d ) { return '-1' ; } string result ( d '0' ); // Reserve 1 for the leftmost digit s -- ; // Fill digits from right to left for ( int i = d - 1 ; i > 0 ; i -- ) { // Place the largest possible value <= 9 if ( s > 9 ) { result [ i ] = '9' ; s -= 9 ; } else { result [ i ] = '0' + s ; s = 0 ; } } // Place the leftmost digit ensuring // it's non-zero result [ 0 ] = '1' + s ; return result ; } // Driver Code int main () { int s = 9 d = 2 ; cout < < smallestNumber ( s d ) < < endl ; return 0 ; }
Java // Java program to find the smallest d-digit // number with the given sum using // Greedy Technique import java.util.* ; class GfG { static String smallestNumber ( int s int d ) { // If sum is too small or too large // for d digits if ( s < 1 || s > 9 * d ) { return '-1' ; } char [] result = new char [ d ] ; Arrays . fill ( result '0' ); // Reserve 1 for the leftmost digit s -- ; // Fill digits from right to left for ( int i = d - 1 ; i > 0 ; i -- ) { // Place the largest possible value <= 9 if ( s > 9 ) { result [ i ] = '9' ; s -= 9 ; } else { result [ i ] = ( char ) ( '0' + s ); s = 0 ; } } // Place the leftmost digit ensuring // it's non-zero result [ 0 ] = ( char ) ( '1' + s ); return new String ( result ); } // Driver Code public static void main ( String [] args ) { int s = 9 d = 2 ; System . out . println ( smallestNumber ( s d )); } }
Python # Python program to find the smallest d-digit # number with the given sum using # Greedy Technique def smallestNumber ( s d ): # If sum is too small or too large # for d digits if s < 1 or s > 9 * d : return '-1' result = [ '0' ] * d # Reserve 1 for the leftmost digit s -= 1 # Fill digits from right to left for i in range ( d - 1 0 - 1 ): # Place the largest possible value <= 9 if s > 9 : result [ i ] = '9' s -= 9 else : result [ i ] = str ( s ) s = 0 # Place the leftmost digit ensuring # it's non-zero result [ 0 ] = str ( 1 + s ) return '' . join ( result ) # Driver Code if __name__ == '__main__' : s d = 9 2 print ( smallestNumber ( s d ))
C# // C# program to find the smallest d-digit // number with the given sum using // Greedy Technique using System ; class GfG { static string smallestNumber ( int s int d ) { // If sum is too small or too large // for d digits if ( s < 1 || s > 9 * d ) { return '-1' ; } char [] result = new char [ d ]; Array . Fill ( result '0' ); // Reserve 1 for the leftmost digit s -- ; // Fill digits from right to left for ( int i = d - 1 ; i > 0 ; i -- ) { // Place the largest possible value <= 9 if ( s > 9 ) { result [ i ] = '9' ; s -= 9 ; } else { result [ i ] = ( char ) ( '0' + s ); s = 0 ; } } // Place the leftmost digit ensuring // it's non-zero result [ 0 ] = ( char ) ( '1' + s ); return new string ( result ); } // Driver Code static void Main () { int s = 9 d = 2 ; Console . WriteLine ( smallestNumber ( s d )); } }
JavaScript // JavaScript program to find the smallest d-digit // number with the given sum using // Greedy Technique function smallestNumber ( s d ) { // If sum is too small or too large // for d digits if ( s < 1 || s > 9 * d ) { return '-1' ; } let result = Array ( d ). fill ( '0' ); // Reserve 1 for the leftmost digit s -- ; // Fill digits from right to left for ( let i = d - 1 ; i > 0 ; i -- ) { // Place the largest possible value <= 9 if ( s > 9 ) { result [ i ] = '9' ; s -= 9 ; } else { result [ i ] = String ( s ); s = 0 ; } } // Place the leftmost digit ensuring // it's non-zero result [ 0 ] = String ( 1 + s ); return result . join ( '' ); } // Driver Code let s = 9 d = 2 ; console . log ( smallestNumber ( s d ));
Випуск
18