题目描述:
给定一个数字N,打印从1到最大的N位数。
思路:如果用for循环,那么这道题将毫无意义。如果N不是5而是100,还能用for循环吗。我的做法是dfs回溯求全排列,注意不要讲前导零输出。
#include <cstdio>
#include <cstring>
using namespace std;
int num[10];
int n;
void dfs(int cur){
if(cur == n){
bool f = false;
for(int i = 0; i < n; i++){
if(num[i] != 0)
f = true;
if(f || num[i] != 0)
printf("%d", num[i]);
}
if(f)
printf("\n");
return;
}
for(int i = 0; i < 10; i++){
num[cur] = i;
dfs(cur+1);
}
}
int main()
{
scanf("%d", &n);
dfs(0);
return 0;
}