面试题17-打印从1开始到最大的n位十进制数。

题目要求

输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数999 。

题目解析

思路一:

  • 分析

这个题目看起来很简单,之间从最小的1遍历到最大值逐个输出。不过我们很容易忽视的是我们并不能知道n的输入限制。
所以我们不能使用int,long,等类型进行遍历。
我们可以换一个思路,用char数组进行盛放,自定义模拟加法。

  • 代码段
  static boolean isFirst = true ;
    
    public static void printAllNum(int n) throws Exception {
        
        if(n<1) {
            return ;
        }
        
        isFirst = true ;
        char[] nums = new char[n] ;
        Arrays.fill(nums, '0');
        
        while(!isOver(nums)){
            addOne(nums, n-1) ;
            
            printNum(nums);
        } 
        
    }
    
    //判断是不是已经达到最大值
    public static boolean isOver(char[] nums) {
        
        for(int i = 0 ; i < nums.length ; i++) {
            if(nums[i] != '9') {
                return false ;
            } ;
        }
        
        return true ;
    }
    
    //char[]数组模拟加法
    public static char[] addOne(char[] nums , int index) {
        
        if(nums[index] != '9') {
            nums[index] = (char) (nums[index] + 1) ;
        }else {
            nums[index] = '0' ;
            nums = addOne(nums , index-1) ;
        }   
        return nums ;   
    }
    
    //在输出是需要注意,在数组中左边空白都是‘0’字符,当n==3 ; 则在数组中9位009。这不符合我们的习惯。
    //所以我们要对次做一些处理。
    public static void printNum(char[] nums) {
            
        boolean isBegin = false ;
        int beginIndex = 0 ;
        
        for(int i = 0 ; i < nums.length ; i++) {
            
            if(nums[i] != '0' ) {
                isBegin = true ;
                beginIndex = i ;
                break ;
            }
        }
        
        if(isBegin) {
            if(!isFirst ) {
                System.out.print("、");
            }else {
                isFirst = false ;
            }
        }
        
        for(int i = beginIndex ; i < nums.length ; i++) {
            if(isBegin) {
                System.out.print(nums[i]);
            }
        }
    
    }

思路二:

  • 分析

将问题转换为全排列问题,n位数的所有自然数为n位数的全排列。前面为0的不输出0

  • 代码段
public static void printAllNum1(int n) {
        
        if(n <= 0) {
            return ;
        }
        
        char[] nums = new char[n] ;
        Arrays.fill(nums, '0');
        isFirst = true ;
        
        for(int i = 0 ; i < 10 ; i++) {
            nums[0] = (char) ('0' + i) ;
            print1ToMaxNum(nums , n , 0) ;
        }
    }

//对每一位进行赋值进行递归
    public static void print1ToMaxNum(char[] nums , int length , int index ) {
        
        if(length-1 == index) {
            printNum(nums);
            return ;
        }
        
        for(int i = 0 ; i < 10 ; i++ ) {
            nums[1+index] = (char) (i + '0') ; 
            print1ToMaxNum(nums , length , index+1) ;
        }
        
        
    }

测试代码

public static void main(String[] args) {
        try {
            printAllNum(1) ;
            System.out.println();
            printAllNum(3) ;
            System.out.println();
            printAllNum(0) ;
            printAllNum1(1) ;
            System.out.println();
            printAllNum1(3) ;
            System.out.println();
            printAllNum1(0) ;
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

运行结果

1、2、3、4、5、6、7、8、9
1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49、50、51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68、69、70、71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、86、87、88、89、90、91、92、93、94、95、96、97、98、99、100、101、102、103、104、105、106、107、108、109、110、111、112、113、114、115、116、117、118、119、120、121、122、123、124、125、126、127、128、129、130、131、132、133、134、135、136、137、138、139、140、141、142、143、144、145、146、147、148、149、150、151、152、153、154、155、156、157、158、159、160、161、162、163、164、165、166、167、168、169、170、171、172、173、174、175、176、177、178、179、180、181、182、183、184、185、186、187、188、189、190、191、192、193、194、195、196、197、198、199、200、201、202、203、204、205、206、207、208、209、210、211、212、213、214、215、216、217、218、219、220、221、222、223、224、225、226、227、228、229、230、231、232、233、234、235、236、237、238、239、240、241、242、243、244、245、246、247、248、249、250、251、252、253、254、255、256、257、258、259、260、261、262、263、264、265、266、267、268、269、270、271、272、273、274、275、276、277、278、279、280、281、282、283、284、285、286、287、288、289、290、291、292、293、294、295、296、297、298、299、300、301、302、303、304、305、306、307、308、309、310、311、312、313、314、315、316、317、318、319、320、321、322、323、324、325、326、327、328、329、330、331、332、333、334、335、336、337、338、339、340、341、342、343、344、345、346、347、348、349、350、351、352、353、354、355、356、357、358、359、360、361、362、363、364、365、366、367、368、369、370、371、372、373、374、375、376、377、378、379、380、381、382、383、384、385、386、387、388、389、390、391、392、393、394、395、396、397、398、399、400、401、402、403、404、405、406、407、408、409、410、411、412、413、414、415、416、417、418、419、420、421、422、423、424、425、426、427、428、429、430、431、432、433、434、435、436、437、438、439、440、441、442、443、444、445、446、447、448、449、450、451、452、453、454、455、456、457、458、459、460、461、462、463、464、465、466、467、468、469、470、471、472、473、474、475、476、477、478、479、480、481、482、483、484、485、486、487、488、489、490、491、492、493、494、495、496、497、498、499、500、501、502、503、504、505、506、507、508、509、510、511、512、513、514、515、516、517、518、519、520、521、522、523、524、525、526、527、528、529、530、531、532、533、534、535、536、537、538、539、540、541、542、543、544、545、546、547、548、549、550、551、552、553、554、555、556、557、558、559、560、561、562、563、564、565、566、567、568、569、570、571、572、573、574、575、576、577、578、579、580、581、582、583、584、585、586、587、588、589、590、591、592、593、594、595、596、597、598、599、600、601、602、603、604、605、606、607、608、609、610、611、612、613、614、615、616、617、618、619、620、621、622、623、624、625、626、627、628、629、630、631、632、633、634、635、636、637、638、639、640、641、642、643、644、645、646、647、648、649、650、651、652、653、654、655、656、657、658、659、660、661、662、663、664、665、666、667、668、669、670、671、672、673、674、675、676、677、678、679、680、681、682、683、684、685、686、687、688、689、690、691、692、693、694、695、696、697、698、699、700、701、702、703、704、705、706、707、708、709、710、711、712、713、714、715、716、717、718、719、720、721、722、723、724、725、726、727、728、729、730、731、732、733、734、735、736、737、738、739、740、741、742、743、744、745、746、747、748、749、750、751、752、753、754、755、756、757、758、759、760、761、762、763、764、765、766、767、768、769、770、771、772、773、774、775、776、777、778、779、780、781、782、783、784、785、786、787、788、789、790、791、792、793、794、795、796、797、798、799、800、801、802、803、804、805、806、807、808、809、810、811、812、813、814、815、816、817、818、819、820、821、822、823、824、825、826、827、828、829、830、831、832、833、834、835、836、837、838、839、840、841、842、843、844、845、846、847、848、849、850、851、852、853、854、855、856、857、858、859、860、861、862、863、864、865、866、867、868、869、870、871、872、873、874、875、876、877、878、879、880、881、882、883、884、885、886、887、888、889、890、891、892、893、894、895、896、897、898、899、900、901、902、903、904、905、906、907、908、909、910、911、912、913、914、915、916、917、918、919、920、921、922、923、924、925、926、927、928、929、930、931、932、933、934、935、936、937、938、939、940、941、942、943、944、945、946、947、948、949、950、951、952、953、954、955、956、957、958、959、960、961、962、963、964、965、966、967、968、969、970、971、972、973、974、975、976、977、978、979、980、981、982、983、984、985、986、987、988、989、990、991、992、993、994、995、996、997、998、999
1、2、3、4、5、6、7、8、9
1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、24、25、26、27、28、29、30、31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49、50、51、52、53、54、55、56、57、58、59、60、61、62、63、64、65、66、67、68、69、70、71、72、73、74、75、76、77、78、79、80、81、82、83、84、85、86、87、88、89、90、91、92、93、94、95、96、97、98、99、100、101、102、103、104、105、106、107、108、109、110、111、112、113、114、115、116、117、118、119、120、121、122、123、124、125、126、127、128、129、130、131、132、133、134、135、136、137、138、139、140、141、142、143、144、145、146、147、148、149、150、151、152、153、154、155、156、157、158、159、160、161、162、163、164、165、166、167、168、169、170、171、172、173、174、175、176、177、178、179、180、181、182、183、184、185、186、187、188、189、190、191、192、193、194、195、196、197、198、199、200、201、202、203、204、205、206、207、208、209、210、211、212、213、214、215、216、217、218、219、220、221、222、223、224、225、226、227、228、229、230、231、232、233、234、235、236、237、238、239、240、241、242、243、244、245、246、247、248、249、250、251、252、253、254、255、256、257、258、259、260、261、262、263、264、265、266、267、268、269、270、271、272、273、274、275、276、277、278、279、280、281、282、283、284、285、286、287、288、289、290、291、292、293、294、295、296、297、298、299、300、301、302、303、304、305、306、307、308、309、310、311、312、313、314、315、316、317、318、319、320、321、322、323、324、325、326、327、328、329、330、331、332、333、334、335、336、337、338、339、340、341、342、343、344、345、346、347、348、349、350、351、352、353、354、355、356、357、358、359、360、361、362、363、364、365、366、367、368、369、370、371、372、373、374、375、376、377、378、379、380、381、382、383、384、385、386、387、388、389、390、391、392、393、394、395、396、397、398、399、400、401、402、403、404、405、406、407、408、409、410、411、412、413、414、415、416、417、418、419、420、421、422、423、424、425、426、427、428、429、430、431、432、433、434、435、436、437、438、439、440、441、442、443、444、445、446、447、448、449、450、451、452、453、454、455、456、457、458、459、460、461、462、463、464、465、466、467、468、469、470、471、472、473、474、475、476、477、478、479、480、481、482、483、484、485、486、487、488、489、490、491、492、493、494、495、496、497、498、499、500、501、502、503、504、505、506、507、508、509、510、511、512、513、514、515、516、517、518、519、520、521、522、523、524、525、526、527、528、529、530、531、532、533、534、535、536、537、538、539、540、541、542、543、544、545、546、547、548、549、550、551、552、553、554、555、556、557、558、559、560、561、562、563、564、565、566、567、568、569、570、571、572、573、574、575、576、577、578、579、580、581、582、583、584、585、586、587、588、589、590、591、592、593、594、595、596、597、598、599、600、601、602、603、604、605、606、607、608、609、610、611、612、613、614、615、616、617、618、619、620、621、622、623、624、625、626、627、628、629、630、631、632、633、634、635、636、637、638、639、640、641、642、643、644、645、646、647、648、649、650、651、652、653、654、655、656、657、658、659、660、661、662、663、664、665、666、667、668、669、670、671、672、673、674、675、676、677、678、679、680、681、682、683、684、685、686、687、688、689、690、691、692、693、694、695、696、697、698、699、700、701、702、703、704、705、706、707、708、709、710、711、712、713、714、715、716、717、718、719、720、721、722、723、724、725、726、727、728、729、730、731、732、733、734、735、736、737、738、739、740、741、742、743、744、745、746、747、748、749、750、751、752、753、754、755、756、757、758、759、760、761、762、763、764、765、766、767、768、769、770、771、772、773、774、775、776、777、778、779、780、781、782、783、784、785、786、787、788、789、790、791、792、793、794、795、796、797、798、799、800、801、802、803、804、805、806、807、808、809、810、811、812、813、814、815、816、817、818、819、820、821、822、823、824、825、826、827、828、829、830、831、832、833、834、835、836、837、838、839、840、841、842、843、844、845、846、847、848、849、850、851、852、853、854、855、856、857、858、859、860、861、862、863、864、865、866、867、868、869、870、871、872、873、874、875、876、877、878、879、880、881、882、883、884、885、886、887、888、889、890、891、892、893、894、895、896、897、898、899、900、901、902、903、904、905、906、907、908、909、910、911、912、913、914、915、916、917、918、919、920、921、922、923、924、925、926、927、928、929、930、931、932、933、934、935、936、937、938、939、940、941、942、943、944、945、946、947、948、949、950、951、952、953、954、955、956、957、958、959、960、961、962、963、964、965、966、967、968、969、970、971、972、973、974、975、976、977、978、979、980、981、982、983、984、985、986、987、988、989、990、991、992、993、994、995、996、997、998、999


看完整源码戳源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 终于等到你,还好我没放弃……我的手机铃声响了,把这首歌作为铃声是因为一个我暗恋的人,只因为穆谨给我空间留言和歌词一...
    X小李姑娘阅读 676评论 14 7
  • 分享一个我自己改变前的故事,每个女人都喜欢能够在家里有一个自己的地位,有一个爱自己的老公,能和婆婆处的来,但是往往...
    元小英阅读 332评论 18 4
  • 智者养生也,必须四时而调寒暑。 ——曹庭栋 恼一恼,老一老;笑一笑,少一少。 — 食欲数而少,又欲顿而多。 ——曹...
    杨蕾001阅读 1,363评论 0 0
  • 文 |夏九九 1. 这注定是一本要颠覆你关于饮食健康观念的奇书。 这本书叫《谷物大脑》,作者戴维.铂尔马特是世界上...
    厦九九阅读 15,850评论 74 539