No-Zero integer is a positive integer that does not contain any 0
in its decimal representation.
Given an integer n
, return a list of two integers [a, b]
where:
a
and b
are No-Zero integers.a + b = n
The test cases are generated so that there is at least one valid solution. If there are many valid solutions, you can return any of them.
Example 1:
Input: n = 2 Output: [1,1] Explanation: Let a = 1 and b = 1. Both a and b are no-zero integers, and a + b = 2 = n.
Example 2:
Input: n = 11 Output: [2,9] Explanation: Let a = 2 and b = 9. Both a and b are no-zero integers, and a + b = 11 = n. Note that there are other valid answers as [8, 3] that can be accepted.
Constraints:
2 <= n <= 104
This problem asks to find two positive integers, a
and b
, such that their sum is equal to a given integer n
, and neither a
nor b
contains the digit '0' in their decimal representation. We'll explore two approaches: direct enumeration with string conversion and direct enumeration with a helper function.
This approach iterates through possible values of a
from 1 to n-1
. For each a
, it calculates b = n - a
. Then, it converts both a
and b
to strings and checks if either string contains '0'. If neither contains '0', the pair [a, b]
is a valid solution, and it's returned.
Code (Python):
class Solution:
def getNoZeroIntegers(self, n: int) -> List[int]:
for a in range(1, n):
b = n - a
if "0" not in str(a) + str(b):
return [a, b]
Time Complexity: O(n log n) - The outer loop iterates up to n times. The string conversion and checking within the loop take O(log n) time in the worst case (where n is large, requiring more digits to represent).
Space Complexity: O(log n) - The space used is mainly for string conversion, which is proportional to the number of digits in n.
This approach is similar to the first, but it uses a helper function, f(x)
, to efficiently check if an integer x
contains the digit '0'. The helper function iterates through the digits of x
using modular arithmetic. If a '0' is found, it returns False
; otherwise, it returns True
.
Code (Python):
class Solution:
def getNoZeroIntegers(self, n: int) -> List[int]:
def f(x):
while x:
if x % 10 == 0:
return False
x //= 10
return True
for a in range(1, n):
b = n - a
if f(a) and f(b):
return [a, b]
Time Complexity: O(n log n) - Similar to Approach 1, the outer loop iterates up to n times. The helper function f(x)
takes O(log n) time in the worst case (proportional to the number of digits).
Space Complexity: O(1) - This approach uses constant extra space, regardless of the input size. The helper function's space is not dependent on the input n
.
Comparison:
Both approaches have the same time complexity, but Approach 2 is slightly more efficient in terms of space complexity because it avoids string conversions. The choice depends on preference and coding style; Approach 2 might be considered slightly more elegant due to its modularity. For smaller values of n
, the difference will be negligible. For extremely large values of n
, the space efficiency of Approach 2 might become more noticeable.