LintCode 用递归打印数字题目分析代码

题目

用递归的方法找到从1到最大的N位整数。

注意事项

用下面这种方式去递归其实很容易:

recursion(i) { if i > largest number: return results.add(i) recursion(i + 1) } 但是这种方式会耗费很多的递归空间,导致堆栈溢出。你能够用其他的方式来递归使得递归的深度最多只有 N 层么?

您在真实的面试中是否遇到过这个题? Yes 样例 给出 N = 1, 返回[1,2,3,4,5,6,7,8,9].

给出 N = 2, 返回[1,2,3,4,5,6,7,8,9,10,11,...,99].

分析

理解为1到9,乘以n-1个10的循环

代码

public class Solution {
    /**
     * @param n: An integer.
     * return : An array storing 1 to the largest number with n digits.
     */
    public List<Integer> numbersByRecursion(int n) {
        // write your code here
        ArrayList<Integer> res = new ArrayList<>();
        num(n, 0, res);
        return res;
    }
    
    public void num(int n, int ans,ArrayList<Integer> res){
        
        if(n==0){
            if(ans>0){
                res.add(ans);
            }
            return;
        }
        
        int i;
        for(i=0; i<=9; i++){
            num(n-1, ans*10+i, res);
        }
        
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android开发小工

Java集合解惑

本文取自工匠若水的qq群里的Java基础题目,把里面有关Java集合放在一起。 全文github地址

1262
来自专栏Java帮帮-微信公众号-技术文章全总结

Java常犯错误top10

1. 数组转ArrayList 为了实现把一个数组转换成一个ArrayList,很多java程序员会使用如下的代码: List<String> list = A...

3797
来自专栏技术小站

(转)JAVA HashSet 去除重复值原理

Java中的set是一个不包含重复元素的集合,确切地说,是不包含e1.equals(e2)的元素对。Set中允许添加null。Set不能保证集合里元素的顺序。

2711
来自专栏赵俊的Java专栏

不用加减乘除做加法

1844
来自专栏杨熹的专栏

【LEETCODE】模拟面试-39. Combination Sum

和subset区别:规定了子集的sum==target 注意,这里传递的起始位置是i,而不是position+1,but why??? helper(res, ...

2855
来自专栏互扯程序

Java常用集合源码级深度解析

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:...

5046
来自专栏好好学java的技术栈

“365算法每日学计划”:04打卡-自己动手写一个单链表

1453
来自专栏Java技术栈

Java码农必须掌握的循环删除List元素的正确方法!

首先看下下面的各种删除list元素的例子 public static void main(String[] args) { List<Stri...

36110
来自专栏zingpLiu

LeetCode【第217题】Contains Duplicate

1155
来自专栏java一日一条

如何用Map对象创建Set对象

Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。

751

扫码关注云+社区

领取腾讯云代金券