开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 34 天,点击查看活动详情
问题描述
「无零整数」是十进制表示中 不含任何 0 的正整数。
给你一个整数 n,请你返回一个 由两个整数组成的列表 [A, B],满足:
A和B都是无零整数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
思路分析
首先我们要先理解一下题目的意思,题目会给我们一个正整数,我们需要将整数转换为两个无零整数的和,这里的无零整数指的是:十进制表示中 不含任何 0 的正整数,返回两个无零整数组成的列表[A,B],A,B需要满足以下条件:
A和B都是无零整数A + B = n
我们可以直接遍历小于n的整数i,判断i和n-i是否都为无零整数即可。
- 判断是否无零整数
将数字转换成字符串,再使用字符串的includes方法即可判断当前整数是否为无零整数。
const has0 = (str) => {
return str.includes('0');
};
- 遍历取值
遍历小于n的整数i,设A = i,则B = n - i,我们只需要判断i和n-i是否都为无零整数即可,如果都为无零整数,则可直接返回答案。
for(let i = 1; i < n; i++){
if(!has0(i + '') && !has0(n - i + '')){
return [i,n-i];
}
}
AC 代码
完整代码如下:
/**
* @param {number} n
* @return {number[]}
*/
var getNoZeroIntegers = function(n) {
const has0 = (str) => {
return str.includes('0');
};
for(let i = 1; i < n; i++){
if(!has0(i + '') && !has0(n - i + '')){
return [i,n-i];
}
}
return [];
};
说在后面
本人为算法业余爱好者,平时只是随着兴趣偶尔刷刷题,如果上面分享有错误的地方,欢迎指出,感激不尽。