17.打印從1到最大的n位數(待填坑)

題目:輸入數字n,按順序打印出從1到最大的n位十進制數。比如輸入3,則打印出1、2、3一直到最大的3位數999.

(這道題在牛客上好像沒找到,我暫時把思路放上來,之後如果看到了再做。如果做完一遍發現還是沒有,那就自己在IDE裏跑一遍。)

思路1:循環從1開始逐個打印,終止條件爲10^n-1,輸入3,終止條件就是小於等於1000-1

思路2:由於上述問題並沒有規定n的範圍,因此需要考慮大數問題。最常用的方法是字符串或者數組來表達大數。當沒有到達終止條件時,就打印。如果調用庫函數strcmp比較表示數字的字符串number和最大的n位數是否相等來停止的話,對於長度爲n的字符串,它的時間複雜度爲O(n)。而通過發現在加1時如果第一個數字發生進位,那麼已經達到最大的n位數了,時間複雜度爲O(1)。字符串長度n+1,前n位初始化爲0。打印字符串時,前面那些補位的0不應該打印出來,因此在打印時只有碰到第一個非0的字符之後纔開始打印,直至字符串的結尾。這裏面判斷條件和打印都需要細看。

記錄常用的strlen(),strcmp(),memset()

記錄ASCII碼錶,'0'-48,  'A'-65 , 'a'-97

思路3:用遞歸表示全排列。每位數字其實都是0~9,把每一位都從0-9排列一遍就能得到所有的十進制數,在打印時,排在前面的0不打印出來就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章