您的位置:首页 > 其它

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

2015-09-01 18:51 288 查看
描述
输入一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: