面试题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


看完整源码戳源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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