【递归】用递归打印数字
题目要求
用递归的方法找到从1到最大的N位整数。
思路解析
直接暴力会栈溢出,需要减少递归次数。
在main方法里面,首先把数字的最高位给定好,从0一直到9。
然后在递归方法里面再往次高位递归,一直到最低位,直接加到数组里即可。
要注意的点
- Java里字符数组及各种类型转换的使用方式
- 递归的条件、结束时的状态
Java实现
public class Solution {
/**
* @param n: An integer
* @return: An array storing 1 to the largest number with n digits.
*/
private List<Integer> result = new ArrayList<Integer>();
public void recurse(char[] cur, int n, int i) {
if(i == n-1) {
StringBuilder tmpStr = new StringBuilder();
for(char j : cur) {
tmpStr.append(j);
}
result.add(Integer.valueOf(tmpStr.toString()));
return;
}
for(int j=0; j<10; j++) {
String tmpStr = String.valueOf(j);
cur[i+1] = tmpStr.charAt(0);
recurse(cur, n, i+1);
}
}
public List<Integer> numbersByRecursion(int n) {
// write your code here
if(n == 0) return null;
char[] cur = new char[n];
Arrays.fill(cur, '0');
for(int i=0; i<10; i++) {
String tmpStr = String.valueOf(i);
cur[0] = tmpStr.charAt(0);
recurse(cur, n, 0);
}
return result.subList(1, result.size());
}
}
本题需要感谢大佬帮助理解递归过程。