博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] Print Numbers by Recursion
阅读量:6760 次
发布时间:2019-06-26

本文共 1749 字,大约阅读时间需要 5 分钟。

Problem

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

Example

Given N = 1, return [1,2,3,4,5,6,7,8,9].

Given N = 2, return [1,2,3,4,5,6,7,8,9,10,11,12,...,99].

Note

只有当位数n >= 0时,才打印数字。首先分析边界n = 0,应该return 1,然后用base存最高位。用helper()函数对base进行递归运算,同时更新结果数组res

更新res的过程:

res = {1, 2, 3, 4, 5, 6, 7, 8, 9};base = helper(n-1, res); //10//i = 1 ~ 9;for i:curbase = i * base; //10, 20, 30, 40, ... , 80, 90res.add(curbase); // 10; 20; ... ; 80; 90//j = index of res;for j:res.add(curbase + res.get(j)); //11, 12, 13, ... , 18, 19;                               //21, 22, 23, ... , 28, 29;                               //...

归纳一下,首先,计算最高位存入base,然后,用1到9倍的base(curbase)和之前res里已经存入的所有的数(res.size()个)循环相加,再存入res,更新res.size,计算更高位直到base等于10^n...

Solution

Recursion

public class Solution {    public List
numbersByRecursion(int n) { List
res = new ArrayList
(); if (n >= 0) { helper(n, res); } return res; } public int helper(int n, List
res) { if (n == 0) return 1; int base = helper(n-1, res); int size = res.size(); for (int i = 1; i <= 9; i++) { int curbase = i * base; res.add(curbase); for (int j = 0; j < size; j++) { res.add(curbase + res.get(j)); } } return base * 10; }}

Non-recursion

public class Solution {    public List
numbersByRecursion(int n) { List
res = new ArrayList
(); int max = 1; while (n != 0) { max *= 10; n--; } for (int i = 1; i < max; i++) { res.add(i); } return res; }}

转载地址:http://drbeo.baihongyu.com/

你可能感兴趣的文章
使用PL/SQL连接Oracle时报错ORA-12541: TNS: 无监听程序
查看>>
Mac011--DbWrench Database安装
查看>>
[原]Flash研究(一)——本地通讯
查看>>
bootStrap table 和 JS 开发过程中遇到问题汇总
查看>>
【小知识点】input输入框在安卓以及IOS手机中光标及字体不居中解决方法
查看>>
VB 设置循环,以及弹出messageBox
查看>>
经典算法-链表(golang)
查看>>
leetcode — search-a-2d-matrix
查看>>
魔板 bfs() 预处理,记录每种状态。然后状态置换,(重点要用到全排列的hash记录状态)...
查看>>
构建之法课后作业第一次作业(15个题选一个)
查看>>
操作redis方法
查看>>
C语言函数
查看>>
Python3-异常处理
查看>>
Python-简单打印进度条
查看>>
【02】天气查询应用(第二课)
查看>>
监听微信返回按钮
查看>>
第二次实验报告
查看>>
HDU ACM 3790 最短路径问题
查看>>
python生成器
查看>>
linux 安装 ftp
查看>>