题目描述:
给定一个数字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;
}
递归求解N位数
本文介绍了一种使用深度优先搜索(DFS)的方法来打印从1到最大的N位数,避免了使用for循环带来的不便。通过递归实现,特别注意处理前导零的情况。
167

被折叠的 条评论
为什么被折叠?



