【LetMeFly】1317.将整数转换为两个无零整数的和:暴力模拟
力扣题目链接:https://leetcode.cn/problems/convert-integer-to-the-sum-of-two-no-zero-integers/
「无零整数」是十进制表示中 不含任何 0 的正整数。
给你一个整数 n
,请你返回一个 由两个整数组成的列表 [a, b]
,满足:
题目数据保证至少有一个有效的解决方案。
如果存在多个有效解决方案,你可以返回其中任意一个。
示例 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]
提示:
解题方法:模拟
从1
到n-1
枚举i
,如果i
和n-i
十进制下都不包含0
,则返回[i, n - i]
。
如何判断一个数字十进制下是否含有0?两种方法:
- 当这个数大于0时不断模10看余数,然后将这个数除以10向下取整直到为0为止。期间若任何一个余数为0则说明十进制下包含0。
- 判断这个数十进制下字符串中是否包含字符
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
|
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 {}; } };
|
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 []
|
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
|
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
|
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
|
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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源