1317.将整数转换为两个无零整数的和:暴力模拟

【LetMeFly】1317.将整数转换为两个无零整数的和:暴力模拟

力扣题目链接:https://leetcode.cn/problems/convert-integer-to-the-sum-of-two-no-zero-integers/

「无零整数」是十进制表示中 不含任何 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 <= 104

解题方法:模拟

1n-1枚举i,如果in-i十进制下都不包含0,则返回[i, n - i]

如何判断一个数字十进制下是否含有0?两种方法:

  1. 当这个数大于0时不断模10看余数,然后将这个数除以10向下取整直到为0为止。期间若任何一个余数为0则说明十进制下包含0。
  2. 判断这个数十进制下字符串中是否包含字符0

想简单题复杂做(玩玩)的话也可以参考:灵神@三种方法:枚举/随机/构造

  • 时间复杂度$O(n\log n)$
  • 空间复杂度:不使用字符串$O(1)$,使用字符串$O(\log n)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
* @Author: LetMeFly
* @Date: 2025-09-08 23:05:58
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-09-08 23:11:26
*/
class Solution {
private:
inline bool ok(int n) {
while (n) {
if (n % 10 == 0) {
return false;
}
n /= 10;
}
return true;
}
public:
vector<int> getNoZeroIntegers(int n) {
for (int i = 1; i < n; i++) {
if (ok(i) && ok(n - i)) {
return {i, n - i};
}
}
return {}; // FAKE RETURN
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
'''
Author: LetMeFly
Date: 2025-09-08 23:05:58
LastEditors: LetMeFly.xyz
LastEditTime: 2025-09-08 23:13:48
'''
from typing import List

class Solution:
def getNoZeroIntegers(self, n: int) -> List[int]:
for i in range(n):
if '0' not in str(i) and '0' not in str(n - i):
return [i, n - i]
return [] # FAKE RETURN

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
* @Author: LetMeFly
* @Date: 2025-09-08 23:05:58
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-09-08 23:19:08
*/
class Solution {
private boolean non0(int n) {
while (n > 0) {
if (n % 10 == 0) {
return false;
}
n /= 10;
}
return true;
}

public int[] getNoZeroIntegers(int n) {
for (int i = 1; i < n; i++) {
if (non0(i) && non0(n - i)) {
return new int[]{i, n - i};
}
}
return new int[]{};
}
}

Go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
* @Author: LetMeFly
* @Date: 2025-09-08 23:05:58
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-09-08 23:16:59
*/
package main

func nonZero1317(n int) bool {
for n > 0 {
if n % 10 == 0 {
return false
}
n /= 10
}
return true
}

func getNoZeroIntegers(n int) (ans []int) {
for i := 1; i < n; i++ {
if nonZero1317(i) && nonZero1317(n - i) {
return []int{i, n - i}
}
}
return
}

Rust

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
* @Author: LetMeFly
* @Date: 2025-09-08 23:05:58
* @LastEditors: LetMeFly.xyz
* @LastEditTime: 2025-09-08 23:22:39
*/
impl Solution {
fn ok(mut n: i32) -> bool {
while n > 0 {
if n % 10 == 0 {
return false;
}
n /= 10
}
true
}

pub fn get_no_zero_integers(n: i32) -> Vec<i32> {
for i in 1..n {
if Solution::ok(i) && Solution::ok(n - i) {
return vec![i, n - i];
}
}
vec![]
}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


1317.将整数转换为两个无零整数的和:暴力模拟
https://blog.letmefly.xyz/2025/09/08/LeetCode 1317.将整数转换为两个无零整数的和/
作者
发布于
2025年9月8日
许可协议