题目
输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
保证输入的整数最后一位不是 0 。
数据范围: 1 ≤ n ≤ 1 0 8 1≤n≤10^8 1≤n≤108
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1
输入
9876673
输出
37689
分析
从后往前看,只统计首次出现的数字,组合成新数字就行。
另外,这种题一般把整数转化为字符串可以更方便求解。
代码实现
#include <iostream>
#include <unordered_set>
#include <algorithm>
using namespace std;
int main(int argc, char **argv) {
int nums;
cin >> nums;
string str = to_string(nums);
unordered_set<char> set;
reverse(str.begin(), str.end());
string res;
for (char c : str) {
if (set.count(c) != 1) { //只统计首次出现的字符
res += c; // 加入到结果字符串中
set.insert(c);
}
}
cout << stoi(res) << endl;
}
总结
时间复杂度: O ( n ) O(n) O(n)