我试图按照字典顺序打印从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开头的两位数字。这就是这些循环表达的内容。这是错误的。 –
一个好的方法是考虑,如果给定序列中的一个数字,你如何计算下一个数字? –