您的位置:首页 > 其它

华为机试——提取不重复的整数

2017-07-26 21:33 316 查看

题目描述

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

输入描述:

输入一个int型整数

输出描述:

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

示例1

输入

9876673


输出

37689


思路:首先我要说的是这题的测试用例根本不全,如8780我估计它是返回087(正常肯定是87啊),例如2050342估计返回243050(正常返回24305),因为我之前觉得错的答案它也给过了,之前也有一模一样的题LeetCode上过不了,它给过了(我少考虑了一种情况)。这个具体思路见注释吧,情况分得很详细了~

代码:

#include <iostream>
#include <vector>

using namespace std;

int main(){
int input;
int output=0;
cin >> input;
vector<int> res;
int tmp[10] = { 0 };//用来判断当前数字是否出现过
int zeroNUM = 0;//用来判断当前的0是否是例如172000末尾的连接0
while (input){
if (input % 10 == 0){//如果当前位为0
for (int i = 0; i < 10; ++i){//计算是否向res放进去过数字
zeroNUM += tmp[i];//所有对应的数字出现标志相加
}
if (zeroNUM == 0){//如果此时的0为末尾0
input /= 10;//直接将input除以10
}
else if(tmp[0] == 0 && zeroNUM != 0){//如果不是末尾0,且0没有出现过
input /= 10;//将input除以10,且0位置的出现标志置1,并将0放入
tmp[0] = 1;
res.push_back(0);
}
}
else{
if (!tmp[input % 10]){//如果当前位不为0,这个数字的标志为0(没出现过)
tmp[input % 10] = 1;//将标志位置1
res.push_back(input % 10);//将这个数放入,input除以10
input /= 10;
}
else{
input /= 10;//如果出现过,直接将input除以10
}
}
}

for (vector<int>::iterator iter = res.begin(); iter != res.end(); ++iter){//将vector中存的数转换成整数
output = output * 10 + *iter;
}
cout << output << endl;

return 0;
}


输出结果: 运行时间: 3 ms 占用内存:376K 状态:答案正确
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: