算法思路
题目要求提取一个整数,从右到左读取,并去除重复的数字。为了实现这个功能,可以使用哈希表(Set)来记录已出现过的数字,从而避免重复。我们可以从右到左遍历整数的每一位数字,将遇到的未出现过的数字添加到结果中,最后将结果合成新的整数输出。
Code
const rl = require("readline").createInterface({ input: process.stdin }); // 输入接口
var iter = rl[Symbol.asyncIterator](); // 异步迭代器
const readline = async () => (await iter.next()).value; // 读取输入
void async function () {
const num = await readline(); // 获取输入的整数
let str = num.toString(); // 将整数转为字符串,便于逐位操作
let result = []; // 用于存放结果的数组
let seen = new Set(); // 哈希表,记录已出现的数字
// 从右向左遍历字符串中的每一位数字
for (let i = str.length - 1; i >= 0; i--) {
let digit = str[i]; // 获取当前位的数字
if (!seen.has(digit)) { // 如果该数字未出现过
seen.add(digit); // 将数字加入哈希表
result.push(digit); // 将数字加入结果数组
}
}
// 结果数组
console.log(result.join(''));
}()
复杂度分析
- 时间复杂度:O(n),其中n是输入整数的位数。我们遍历了整数的每一位,因此时间复杂度为O(n)。
- 空间复杂度:O(n),用于存储哈希表和结果数组。最坏情况下,输入的每一位数字都不同,需要O(n)的空间。