Ich versuche, die Zahlen von 1 bis N in lexikographischer Reihenfolge zu drucken, aber ich bekomme eine fehlerhafte Ausgabe. für die folgende Eingabe 100, bekomme ich die 100, aber es verschoben und es stimmt nicht mit der erwarteten Ausgabe überein, es gibt einen Fehler in meinem Code, aber ich kann es nicht nachvollziehen.Gegeben eine ganze Zahl N, Zahlen von 1 bis N in lexikographischer Reihenfolge drucken
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
statt 'int' Sie verwenden können‚char‘, da Sie nur eine lexikographische Anordnung wollen ... –
Die Ausgabe zeigt, dass Ihr Code alle zweistelligen Zahlen, die mit 1 beginnen, vor 100 berücksichtigt. Und das ist, was diese Schleifen ausdrücken. Was falsch ist. –
Ein guter Weg vorwärts ist zu überlegen, wie man die nächste Zahl berechnen kann, wenn man eine der Zahlen in der erwarteten Reihenfolge verwendet. –