título Descripción
Xiao Ming es muy aficionado a las matemáticas, un día, cuando estaba haciendo la tarea de matemáticas, necesario para calcular y 9 a 16, de inmediato escribió la respuesta correcta es 100. Pero no estaba satisfecho con esto, se preguntó cómo muchos tipos de número de secuencia positiva continua es de 100 (incluyendo al menos dos números). En poco tiempo, se puso otro conjunto de números positivos consecutivos y una secuencia de 100: 18,19,20,21,22. Ahora la pregunta a usted, usted también puede identificar rápidamente todas las secuencias positiva y continua S? Buena suerte!
Descripción Salida :
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
Esta pregunta puede utilizar la idea de algoritmo de programación dinámica de inicializar una matriz, la matriz es menor que sum
el número positivo de una especie única de la matriz, creamos dos punteros left
al right
punto de 0, y luego crear una nueva variable de count
registro de left
un puntero a right
y una matriz de punteros. A continuación, iniciar while
los ciclos de cada comparación count
con sum
el tamaño, si es count
menor, entonces así right++
, si count
grande, lo hará left--
, entonces será igual a left
un puntero a right
una matriz de punteros en el res
medio. Final del ciclo de retorno res
a.
function FindContinuousSequence(sum)
{
let i = 1;
let temp = new Array(sum-1).fill(1).map(x=>i++)
let res = [];
let left = 0;
let right = 0;
let count = 0;
while(right!=sum){
if(count<sum){
count += temp[right];
right++;
}
else if(count==sum){
res.push(temp.slice(left, right));
count -= temp[left];
left++;
}else{
count -= temp[left];
left++;
}
}
return res;
}