[剑指Offer]17-打印从1到最大的n位数(递归)
题目
如题,输入n,则从1打印至99.
题解
考虑到n比较大会有大数问题,所以使用字符数组存储数。
由题可用递归求n位全排列,即为所得。
具体地,用临时字符数组用来存答案,每次递归填好一位,都填好后输出。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int n=s.nextInt();
printToN(n);
}
public static void printToN(int n) {
char[] num=new char[n];
composeNum(num,0,num.length);
}
//len位全排列
private static void composeNum(char[] num,int pos,int len) {
if(pos==len) {//此位不需要再填,输出此时num即为所得
printDelZero(num);
}
else {
for(int i=0;i<10;++i) {
num[pos]=(char) (i+'0');
composeNum(num,pos+1,len);
}
}
}
//删除前面的0
private static void printDelZero(char[] num) {
int pos=0;
for(;pos<num.length;++pos) {
if(num[pos]!='0') {
break;
}
}
for(int i=pos;i<num.length;++i) {
System.out.print(num[i]);
}
System.out.print("\n");
}
}
posted on 2019-07-10 22:47 coding_gaga 阅读(261) 评论(0) 编辑 收藏 举报
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步