[LeetCode: Recursion and Backtracking]: 1291. Tempos do pedido

1291.Shun freqüência

Dificuldade: média


Definimos a "ordem de ordem" como: o número em cada dígito é um inteiro 1 maior que o número do dígito anterior.
Por favor, retorne uma lista ordenada (classificada do menor ao maior) consistindo em todos os números de pedido no intervalo de [baixo, alto].

Exemplo 1:

Saída: baixo = 100, alto = 300
Saída: [123.234]
Exemplo 2:

Saída: baixo = 1000, alto = 13000
Saída: [1234,2345,3456,4567,5678,6789,12345]

pronto:

10 <= baixo <= alto <= 10 ^ 9


responda

方法一:穷举
/**
 * @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    
};


análise

Pode-se ver pela pergunta que o número de dígitos é um dígito maior que o dígito anterior. Se você deseja atender ao domínio de definição, você pode usar o método exaustivo para percorrer e inserir a matriz se atender às condições, porque o o número inserido não varia de pequeno a grande Sim, portanto, precisa ser classificado no final.
Embora o método exaustivo seja simples, é muito demorado. A poda também pode ser feita aqui.

Se você quiser produzir o número de sequência de [100,1000], primeiro use toString (). Length para converter o número em uma string e, em seguida, encontre o comprimento, ou seja, o número de dígitos nos dados pode ser alcançado, onde 100 são 3 dígitos e 1000 são 4 dígitos Número, ou seja, i> = 3 && i <= 4.
Existem três dígitos entre 100-1000, e o maior número de pedidos coincidentes é 789, e não há nenhum subsequente, ou seja, 789 com o primeiro dígito 7 existe e o primeiro 8,9 não existe, então não há precisa Traverse, para que possa ser podado, para este 10-3 (i) = 7.

Acho que você gosta

Origin blog.csdn.net/qq_43522998/article/details/113086846
Recomendado
Clasificación