Lintcode371 Print Numbers by Recursion solution 题解

【题目描述】

Print numbers from 1 to the largest number with N digits by recursion.

Notice

It's pretty easy to do recursion like:

recursion(i) {

if i > largest number:

return

results.add(i)

recursion(i + 1)

}

however this cost a lot of recursion memory as the recursion depth maybe very large. Can you do it in another way to recursive with at most N depth?

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

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

recursion(i) {

if i > largest number:

return

results.add(i)

recursion(i + 1)

}

但是这种方式会耗费很多的递归空间,导致堆栈溢出。你能够用其他的方式来递归使得递归的深度最多只有 N 层么?

【题目链接】

www.lintcode.com/en/problem/print-numbers-by-recursion/

【题目解析】

从小至大打印 N 位的数列,正如题目中所提供的recursion(i), 解法简单粗暴,但问题在于 N 稍微大一点时栈就溢出了,因为递归深度太深了。能联想到的方法大概有两种,一种是用排列组合的思想去解释,把0~9当成十个不同的数(字符串表示),塞到 N 个坑位中,这个用DFS来解应该是可行的;另一个则是使用数学方法,依次递归递推,比如 N=2 可由 N=1递归而来,具体方法则是乘10进位加法。题中明确要求递归深度最大不超过 N, 故DFS方法比较危险。

【参考答案】

www.jiuzhang.com/solutions/print-numbers-by-recursion/

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,162评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 14,929评论 1 36
  • 我从没有见过太遥远的景色 却一直渴望着 天要比现在的天蓝一些么 落叶要比门前的枯黄叶子多情一些么 远方的山林深处是...
    笑得疯癫阅读 85评论 0 0
  • 第三章:谁? 听见小鱼下楼的脚步声渐行渐远,我赶紧关上了门,身体靠在门上,看着手里的钥匙。 没想到这把钥匙竟然是个...
    北月半反阅读 75评论 0 1
  • “缘深缘浅,路长路短,看见就好,来。”几年前看的电影《四大名捕》中吴秀波的台词。源自生活,而又非生活的一句话。倏...
    春天漫步秋天阅读 316评论 0 0
  • 天气有一丝潮热,正应为潮热可能我的脾气随着天气变化现在有一些火爆。我们出门都已经一点过了,猩猩吃了饭要去上班,我就...
    W理智的疯子阅读 154评论 0 0