提取不重复的整数
题目描述
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是 0
数据范围: n大于等于1,小于等于10的8次方
输入描述
输入一个int型整数
输出描述
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入:9876673
输出:37689
代码
#include<iostream>
using namespace std;
int main()
{
int n;
int hash[10]={0};
int num=0;
cin>>n ;
while(n)
{
if(hash[n%10]==0)
{
hash[n%10]++;//这一步是更新,遇到下次相同的数会跳过
num=num*10+n%10;
}
n/=10;
}
cout<<num<<endl;
return 0;
}
算法思想
设置一个数组来保存整数的每一位,从右到左处理整数,数组初始化为0,每处理一位时看该数字是否重复出现过。若数组该位所表示的下标内容为0,则表示这个数字第一次出现,将该位数组内容修改。(这个数组类似一个哈希表,可在O(1)的时间内判断该数字是否重复出现过。)
用num表示输出,将计算没有重复出现的数字所组成的整数。