华为oj: 提取不重复的整数
2015-09-01 18:51
288 查看
描述 | 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 |
---|---|
知识点 | 数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一个int型整数 |
输出 | 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 如果返的整数以0开头,去掉0; 如 intput:1010 output:1 |
样例输入 | 9876673 |
样例输出 | 37689 |
#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;
}
相关文章推荐
- h.264 基本知识
- linux查询rpm包详细信息
- hot code replace failed
- Java的异常处理
- Solr: 5.2.1 install and config
- 第四届CCF软件能力认证
- CodeForces 8A - Train and Peter
- 【Nginx】基于HTTP的反向代理
- 优先级反转及解决办法
- 存储过程Append 二进制 _ParameterPtr“不正常地定义参数对象。提供了不一致或不完整的信息”
- 线索树的基本例程:(2)
- Appium 自动化用例设计 (Excel 配置篇)
- linux常用命令(14):head命令
- SCMHttpclient
- 使用VMware新建Ubuntu虚拟机
- 软软测试总结检查
- windows下配置protobuf2.6.1
- 盘点基于ARM的十一种嵌入式操作系统
- MySQL残留在电脑里面的服务无法删除?
- 例题6.19 有趣的杨辉三角 UVa1384