# Lexicographically smallest numeric string having odd digit counts

• Last Updated : 18 Oct, 2021

Given a positive integer N, the task is to generate a lexicographically smallest numeric string of size N having an odd count of each digit.

Examples:

Input: N = 4
Output: 1112
Explanation:
Digit 1 and 2 both have an even count and is the lexicographically smallest string possible.

Input: N = 5
Output: 11111
Explanation:
Digit 1 has an odd count and is the lexicographically smallest string possible.

Approach: The given problem can be solved based on the observation that if the value of N is even, then the resulting string contains 1s, (N – 1) number of times followed by a single 2 is the smallest lexicographic string possible. Otherwise, the resulting string contains 1s, N number of times is the smallest lexicographic string possible.

Below is the implementation of the above approach:

## C++14

 `// C++ program for the above approach`   `#include ` `using` `namespace` `std;`   `// Function to construct lexicographically` `// smallest numeric string having an odd` `// count of each characters` `string genString(``int` `N)` `{` `    ``// Stores the resultant string` `    ``string ans = ``""``;`   `    ``// If N is even` `    ``if` `(N % 2 == 0) {` `        ``ans = string(N - 1, ``'1'``) + ``'2'``;` `    ``}`   `    ``// Otherwise` `    ``else` `{` `        ``ans = string(N, ``'1'``);` `    ``}`   `    ``return` `ans;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `N = 5;` `    ``cout << genString(N);`   `    ``return` `0;` `}`

## Python3

 `# python program for the above approach` `# Function to construct lexicographically` `# smallest numeric string having an odd` `# count of each characters` `def` `genString(N):` `  `  `    ``# Stores the resultant string` `    ``ans ``=` `""`   `    ``# If N is even` `    ``if` `(N ``%` `2` `=``=` `0``) :` `        ``ans ``=` `"``".join("``1``" ``for` `i ``in` `range``(N``-``1``))` `        ``ans ``=` `ans ``+` `"2"` `    `  `    ``# Otherwise` `    ``else` `:` `        ``ans ``=` `"``".join("``1``" ``for` `i ``in` `range``(N))` `    `  `    ``return` `ans` `  `  `# Driver code` `if` `__name__ ``=``=` `"__main__"``:` `    ``N ``=` `5` `    ``print``(genString(N))`     `# This code is contributed by anudeep23042002`

## C#

 `// C# program for the above approach` `using` `System;` `class` `GFG {`   `    ``// Function to construct lexicographically` `    ``// smallest numeric string having an odd` `    ``// count of each characters` `    ``static` `string` `genString(``int` `N)` `    ``{` `      `  `        ``// Stores the resultant string` `        ``string` `ans = ``""``;`   `        ``// If N is even` `        ``if` `(N % 2 == 0) {` `            ``for` `(``int` `i = 0; i < N - 1; i++)` `                ``ans += ``'1'``;` `            ``ans += ``'2'``;` `        ``}`   `        ``// Otherwise` `        ``else` `{` `            ``for` `(``int` `i = 0; i < N; i++)` `                ``ans += ``'1'``;` `        ``}`   `        ``return` `ans;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `N = 5;` `        ``Console.WriteLine(genString(N));` `    ``}` `}`   `// This code is contributed by ukasp.`

## Javascript

 ``

Output:

`11111`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up
Recommended Articles
Page :