华为oj: 提取不重复的整数

来源:互联网 发布:ca认证 知乎 编辑:程序博客网 时间:2024/04/28 00:23

描述

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

知识点数组运行时间限制10M内存限制128输入

输入一个int型整数

输出

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

如果返的整数以0开头,去掉0;

如 intput:1010   output:1

样例输入9876673样例输出37689方法:我选择从个位开始取,取出来的数存在一个数组里面,再取一位数时如果满足1)不等于零2)存的数组里面没有;就存在数组里面,否则跳过

#include<iostream>using namespace std;bool seek(int arr[],int len,int num){for(int i=0;i<len;i++){if (num==arr[i]) return false;}return true;}int numReverse(int num){    int temp[10];int count=0;int result=0;int i,tempnum;while(num!=0){   tempnum=num%10;   if(tempnum!=0&&seek(temp,count,tempnum))    {temp[count]=tempnum;count++;}num/=10;   }for(i=0;i<count;i++)result=result*10+temp[i];return result;}int main(){int N;cin>>N;     int res= numReverse(N);cout<<res;}

【优化】由于每一位的数只有0,1,,,9,所以建一个大小为10的数组,索引为每个位上面的值,这样可以减少查找的复杂度

#include<iostream>using namespace std;int numReverse(int num){    int temp[10];int temp2[10]={0};int count=0;int result=0;int i,tempnum;while(num!=0){   tempnum=num%10;           temp2[tempnum]++;   if(tempnum!=0&&temp2)[tempnum]<2)    {temp[count]=tempnum;count++;}num/=10;   }for(i=0;i<count;i++)result=result*10+temp[i];return result;}int main(){int N;cin>>N;     int res= numReverse(N);cout<<res;}








0 0
原创粉丝点击