題目:輸入數字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不打印出來就可以了。