[LeetCode: Recursion and Backtracking]: 1291. Délais de commande

1291.Shun fréquence

Difficulté: moyenne


Nous définissons «l'ordre d'ordre» comme suit: le nombre sur chaque chiffre est un entier supérieur de 1 au nombre du chiffre précédent.
Veuillez renvoyer une liste ordonnée (triée du plus petit au plus grand) comprenant tous les numéros de commande dans la plage [faible, élevé].

Exemple 1:

Sortie: basse = 100, haute = 300
Sortie: [123,234]
Exemple 2:

Sortie: basse = 1000, haute = 13000
Sortie: [1234,2345,3456,4567,5678,6789,12345]

rapide:

10 <= faible <= élevé <= 10 ^ 9


répondre

方法一:穷举
/**
 * @param {number} shorter
 * @param {number} longer
 * @param {number} k
 * @return {number[]}
 */
var sequentialDigits = function(low, high) {
    
    
let res = [],
        index = 0;
    for (let i = 1; i <= 9; i++) {
    
    
        let n = i;
        for (let j = i + 1; j <= 9; j++) {
    
    
            n = n * 10 + j;
            if (n >= low && n <= high) {
    
    
                res[index++] = n;
            }
        }
    }
    //由于穷举后的数并不是由小到大,所以需要进行排序
    return res.sort(function(a,b){
    
    return a-b;});
};

方法二:剪枝
var sequentialDigits = function(low, high) {
    
    
    let res = []
    let lowLen = low.toString().length
    let highLen = high.toString().length
    for(let i=lowLen;i<=highLen;i++){
    
    
        for(let j=1;j<=10-i;j++){
    
    //剪枝:首位数不会大于10-i
            let str = ''
            let num = j
            str += num
            let k = i-1
            while(k--){
    
    
                num++
                str += num
            }
            let ans = parseInt(str)
            if(ans>=low && ans<=high){
    
    
                res.push(ans)
            }
        }
    }
    return res    
};


une analyse

Il ressort de la question que le nombre de chiffres est supérieur d'un chiffre au chiffre précédent. Si vous souhaitez atteindre le domaine de définition, vous pouvez utiliser la méthode exhaustive pour parcourir et entrer le tableau si vous remplissez les conditions, car le le nombre entré n'est pas de petit à grand Oui, il doit donc être trié à la fin.
Bien que la méthode exhaustive soit simple, elle prend trop de temps, la taille peut également être effectuée ici.

Si vous souhaitez afficher le numéro de séquence de [100,1000], utilisez d'abord toString (). Length pour convertir le nombre en chaîne, puis recherchez la longueur, c'est-à-dire le nombre de chiffres dans les données pouvant être atteint, où 100 correspond à 3 chiffres et 1000 correspond à un nombre à 4 chiffres, c'est-à-dire i> = 3 && i <= 4.
Il y a trois chiffres entre 100 et 1000, et le plus grand nombre d'ordres correspondants est 789, et il n'y en a pas de suivants, c'est-à-dire que 789 avec le premier chiffre de 7 existe, et le premier 8,9 n'existe pas, donc il n'y a pas besoin de Traverse, afin qu'il puisse être taillé, pour ce 10-3 (i) = 7.

Je suppose que tu aimes

Origine blog.csdn.net/qq_43522998/article/details/113086846
conseillé
Classement