华为机试——提取不重复的整数
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 状态:答案正确
相关文章推荐
- 华为机试(取近似值,合并表,提取不重复整数,字符个数统计)Java实现
- 【华为机试】提取不重复的整数
- 【华为机试】提取不重复的整数
- 华为机试在线训练-牛客网(6)提取不重复的整数
- 华为机试 提取不重复的整数
- 华为机试:字符个数统计、提取不重复的整数
- 华为机试-提取不重复的整数
- 牛客网_华为机试_009_提取不重复的整数
- Java - 华为机试训练 - 提取不重复的整数
- 华为OJ——提取不重复的整数
- 华为OJ 初级:提取不重复的整数
- 华为oj 取近似值&&合并表记录&&提取不重复的整数
- 华为在线编程系列-提取不重复的整数
- 【华为oj】提取不重复的整数
- 华为oj: 提取不重复的整数
- 华为机试 - 将整数倒序输出,剔除重复数据
- 【华为OJ9】提取不重复的整数
- 【华为oj】提取不重复的整数
- 《华为机试在线训练》之提取不重复的整数
- 【华为 OJ】 提取不重复的整数