1317-将整数转换为两个无零整数的和

Raphael Liu Lv10

「无零整数」是十进制表示中 不含任何 0 的正整数。

给你一个整数 n,请你返回一个 由两个整数组成的列表 [A, B],满足:

  • AB 都是无零整数
  • A + B = n

题目数据保证至少有一个有效的解决方案。

如果存在多个有效解决方案,你可以返回其中任意一个。

示例 1:

**输入:** n = 2
**输出:** [1,1]
**解释:** A = 1, B = 1. A + B = n 并且 A 和 B 的十进制表示形式都不包含任何 0 。

示例 2:

**输入:** n = 11
**输出:** [2,9]

示例 3:

**输入:** n = 10000
**输出:** [1,9999]

示例 4:

**输入:** n = 69
**输出:** [1,68]

示例 5:

**输入:** n = 1010
**输出:** [11,999]

提示:

  • 2 <= n <= 10^4

方法一:枚举

由于题目中给出的 n 的范围 [2, 10000] 较小,因此我们可以直接在 [1, n) 的范围内枚举 A,并通过 n - A 得到 B,再判断 AB 是否均不包含 0 即可。

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
vector<int> getNoZeroIntegers(int n) {
for (int A = 1; A < n; ++A) {
int B = n - A;
if ((to_string(A) + to_string(B)).find('0') == string::npos) {
return {A, B};
}
}
return {};
}
};
[sol1-Python3]
1
2
3
4
5
6
7
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]
return []

复杂度分析

  • 时间复杂度:O(N\log N),枚举 A 的时间复杂度为 O(N),判断 AB 是否均不包含 0 的时间复杂度为 O(\log N),即 AB 的位数之和。

  • 空间复杂度:O(1)。

 Comments
On this page
1317-将整数转换为两个无零整数的和