HJ9 提取不重复的整数

118 阅读1分钟

Problem: HJ9 提取不重复的整数

题目描述

描述

输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是0。
数据范围: 1 ≤ n ≤ 10^8

输入描述:

输入一个int型整数。

输出描述:

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例1

输入:9876673 A
输出:37689

解题思路

使用哈希表存储数据,遍历输入数据,判断每一次遍历的数字是否在哈希表中存在,存在则跳过,不存在则存储进去。

算法流程

  1. 将输入的整数转换为字符串,然后将字符串逆序
  2. 定义一个哈希集合,用于记录已经出现过的数字 3.遍历逆序后的字符串,将每个字符转换为数字
  • 如果该数字没有在哈希集合中出现过,则将其加入结果数字中。
  • 如果该数字已经在哈希集合中出现过,则跳过。
  1. 返回结果数字

代码

function getUniqueDigits(num) {
    let numStr = num.toString().split("").reverse().join("");
    let result = 0;
    let visited = new Set();
    
    for(let i = 0; i < numStr.length; i++){
        let digit = Number(numStr[i]);
        if(!visited.has(digit)){
            result = result * 10 + digit;
            visited.add(digit);
        }
    }
    
    return result;
}

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O(n)O(n)

  • 时间复杂度为O(n)O(n)。需要遍历输入数字的每一位
  • 空间复杂度:

添加空间复杂度, 示例: O(n)O(n)

  • 额外的哈希集合来存储已经出现过的数字,O(x)O(x),x为所有不重复数字的和。