经典面试题(十二)——顺序输出从1到N位数
来源:互联网 发布:个人软件开发合同范本 编辑:程序博客网 时间:2024/06/06 12:37
第一种使用大数加法。。。
第二种使用对数字的全排列,时间是O(10^N),而空间是O(N)。要注意一点的是数字的首位不能为0,同时输出字符数组最后一位应该以'\0'为结尾。
代码如下所示:
#include <iostream>using namespace std;void printNum(char num[], int start, int end){ if(start==end) cout<<num<<endl; else{ for(char i='0'; i <= '9'; ++i){ num[start] = i; printNum(num,start+1,end); } }}void printNum(int n){ char *num = new char[n+1]; for(int i = 1 ; i <= n ; ++i){ num[i] = '\0'; for(char j = '1'; j <= '9'; ++j){ num[0] = j; printNum(num,1,i); } } delete[] num;}int main(){ printNum(4); system("PAUSE"); return 0;}
扩展问题,排列和组合问题可以参考上述代码很快的实现出来。
排列问题可以考虑一下使用一个数组标志该位是否被访问过了,如果被访问过了则不将该字符排列进去。
代码如下所示:
void permutation(char str[], bool *visited, const int len, int index){ if(index==len) cout<<str<<endl; else{ for(int i = 0; i < len; ++i) if(0==visited[i]){ visited[i] = 1; str[index] = i+'a'; permutation(str,visited,len,index+1); visited[i] = 0; } }}void permutation(int n){ char *str = new char[n+1]; str[n] = '\0'; bool *visited = new bool[n]; memset(visited,0,sizeof(bool)*n); permutation(str,visited,n,0);}
代码输出的是a-z,的排列,通过输入长度n来控制。
- 经典面试题(十二)——顺序输出从1到N位数
- 【面试题十二】打印1到最大的n位数
- 剑指Offer(第二版)面试题17:打印从1到最大的n位数
- 程序员面试题精选100题(38)-输出1到最大的N位数
- 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
- 程序员面试题精选100题(38)-输出1到最大的N位数
- 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
- 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
- 剑指Offer:面试题12——打印1到最大的n位数(java实现)
- 剑指offer面试题12——打印1到最大的n位数
- 剑指offer——面试题12:打印1到最大的n位数
- 剑指offer 面试题12—打印1到最大的n位数
- 面试题12—打印1到最大的n位数
- 剑指offer--面试题17:打印从1到最大的n位数
- 【剑指offer】面试题17:打印从1到最大的n位数
- 《剑指offer》面试题17:打印从1到最大的n位数
- 剑指Offer 面试题17:打印从1到最大的n位数 Java代码实现
- 面试题12:打印1到最大的n位数
- bash 学习篇 -- 简介
- 最新百度算法经验总结
- 深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
- APK 变成 ZIP:Android 手机应用程序文件下载服务器需要注意的问题
- MFC中afx_msg
- 经典面试题(十二)——顺序输出从1到N位数
- ???求高手,Extjs的工具栏在宽屏,非宽屏下的自适应问题,,求教了!!!
- 越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用
- iOS 4.3.5 红雪不完美越狱教程
- Bad mode in prefetch abort handler detected
- ubuntu 12.04内核升级
- 更改centos 5 yum源
- 单一职责原则
- Android中Frame的播放介绍