Algoritmo para obtener el artículo (s) en un número preciso

Nino:

Me parece que el algoritmo / funcionalidad en dos partidos ya, pero yo siempre quería saber lo que era la lógica detrás de él.

Básicamente, hay una lista de artículos y cada uno de ellos tiene un id.

Por ejemplo:

  • ITEM_1 tiene id: 1
  • ITEM_2 tiene id: 2
  • item_3 tiene id: 4
  • ITEM_4 tiene id: 8
  • item_5 tiene id: 16
  • etcétera

El ello se multiplica por dos cada nuevo elemento.

Hay, pues, un número, digamos 4, que indican lo que el elemento actual es. Es este caso que sería item_3, pero la parte difícil es que el número podría también seleccionar varios elementos a la vez como 7 que es 4 + 2 + 1 ( item_3, item_2, item_1) o 17 que es 16 + 1 ( item_5, item_1). Se puede ir muy alto como 16384 si tiene una lista larga y todavía ser muy exactos para las selecciones múltiples.

¿Cómo puedo solucionar este problema?

barredora:

El algoritmo que se describe básicamente dando salida, donde los 1 de están en la representación binaria del número.

7, su representación binaria es 111. Hay tres de 1: en la primera, segunda y tercera posición desde la izquierda , respectivamente, por lo que el objeto 1, 2 y 3. Tenga en cuenta que estamos contando desde la izquierda.

Otro ejemplo:

Para el 10, su representación binaria es 1010. Hay dos 1 de: en la segunda y la cuarta posición de la izquierda , por lo que la salida sería artículos 2 y 4.

Aquí es una implementación en C #.

public static List<int> FindOnes(int number) {
    var list = new List<int>();
    var binaryString = Convert.ToString(number, 2);
    for (int i = 0 ; i < binaryString.Length ; i++) {
        if (binaryString[binaryString.Length - i - 1] == '1') {
            list.Add(i + 1);
        }
    }
    return list;
}

// usage:
FindOnes(7) // [1,2,3]

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=237133&siteId=1
Recomendado
Clasificación