我試圖按照字典順序打印從1到N的數字,但是我得到一個失敗的輸出。對於下面的輸入100,我得到了100,但是它的移位並且與預期的輸出不匹配,我的代碼中存在一個錯誤,但是我無法回溯它。給定一個整數N,按字典順序從1到N的打印數字
class Solution {
public:
vector<int> lexicalOrder(int n) {
vector<int> result;
for(int i = 1; i <= 9; i ++){
int j = 1;
while(j <= n){
for(int m = 0; m < j ; ++ m){
if(m + j * i <= n){
result.push_back(m+j*i);
}
}
j *= 10;
}
}
return result;
}
};
Input:
100
Output:
[1,10,11,12,13,14,15,16,17,18,19,100,2,20,21,22,23,24,25,26,27,28,29,3,30,31,32,33,34,35,36,37,38,39,4,40,41,42,43,44,45,46,47,48,49,5,50,51,52,53,54,55,56,57,58,59,6,60,61,62,63,64,65,66,67,68,69,7,70,71,72,73,74,75,76,77,78,79,8,80,81,82,83,84,85,86,87,88,89,9,90,91,92,93,94,95,96,97,98,99]
Expected:
[1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,22,23,24,25,26,27,28,29,3,30,31,32,33,34,35,36,37,38,39,4,40,41,42,43,44,45,46,47
,而不是'int'您可以使用「字符」,因爲你只想要一個字典安排... –
的輸出顯示您的代碼在考慮100之前會執行所有以1開頭的兩位數字。這就是這些循環表達的內容。這是錯誤的。 –
一個好的方法是考慮,如果給定序列中的一個數字,你如何計算下一個數字? –