示例 1:
輸入: n = 1
輸出: [1,2,3,4,5,6,7,8,9]
說明:用返回乙個整數列表來代替列印
n 為正整數
2.1 思路分析
題目假定了返回的是int陣列,故不存在大數越界問題,那麼只需要返回儲存1 ~ (10^n - 1)的陣列即可;
2.2 **實現
class solution
return res;
}}
2.3 複雜度分析
3.1 思路分析
規定返回型別為字串,因為當 n 足夠大時,10^n - 1超過int型的範圍,故用字串來儲存從1到最大的n位數;
詳解參考:
3.2 獲取從0到最大n位數的排列
class solution ;
char num;
int n;
stringbuilder res = new stringbuilder();
public string printnumbers(int n)
//該方法的作用是固定當前位
public void dfs(int x)
for(char i : loop) }
public static void main(string args)
}
3.3 列印從1到最大的n位數(返回字串)
上面的**存在兩個問題:①當n = 2時,列印00 01 02 ... 99,高位的0應該去掉;②此方法從0開始,題目要求從1開始;
解決①的方法:定義變數start來表示字串的左邊界,例如n = 2時,00 ~09時start = 1,10~99時start = 0;
那麼start的變化規律是什麼?現在我們來看兩個示例:①n = 2時,00 ~09時start = 1,10~99時start = 0;②n = 3時,000~009時start = 2,010~099時start = 1,100~999時start = 0;
定義變數ninecount表示乙個組合(比如009)中9的數量,通過示例可以發現:start = n - ninecount,也就是說當這個條件滿足時,以n = 3為例,說明當前數為009,在到下乙個010之前,將start--;
利用迴圈從高位向低位固定字元時,每固定乙個高位字元,就要將ninecount回溯到固定之前的數值,因為每個高位字元之間是並列的關係;
解決問題②的方法:新增數字字串的時候判斷是否為"0",是就直接跳過。
class solution ;
char num;
int n;
int start;
int ninecount = 0;
stringbuilder res = new stringbuilder();
public string printnumbers(int n)
//該方法的作用是固定當前位
public void dfs(int x)
for(char i : loop)
ninecount--; }
public static void main(string args)
}
3.4 列印從1到最大的n位數(返回int)
因為題目要求是返回 int 陣列,其預設不存在大數問題,但我們用大數的方法完全可以解決非大數的問題;
可以在新增數字字串s之前,將其轉換為int型別;
class solution ;
char num;
int n;
int start;
int count = 0;
int ninecount = 0;
int res;
public int printnumbers(int n)
//該方法的作用是固定當前位
public void dfs(int x)
for(char i : loop)
ninecount--; }
public static void main(string args)
}}
列印從1到最大的n位數
題目 輸入數字n,順序列印從1到最大n位的十進位制數,例如輸入3,列印1到999 includebool increment char number void printnumber char number void printtomaxofndigitsrecursively char numbe...
列印從1到最大的n位數
void print1tomaxofndigits int n 上面的 有個最嚴重的問題 沒有關注n的範圍 當輸入的n很大時,我們求最大的n位數用int或者long long都會溢位。也就是我們需要考慮大數問題。因為數字最大是n位,所以我們需要用乙個長度是n 1的字串 字串最後一位放 0 當實際的數...
列印從1到最大的n位數
題目 輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。思路 首先注意這是個大數問題,n很大的時候c 的int和long long都吃不消,所以數字的儲存要用字串 這裡我模擬了大數相加,只不過每次都是加1 另外要注意列印的問題,cout比較慢...