481. cadena mágica
S cadena mágica contiene sólo '1' y '2', y las siguientes reglas:
Es la cadena mágica S, porque el personaje serie '1' y '2' van a generar el número de ocurrencias sucesivas de la cadena s en sí.
Antes de varios elementos de la cadena de S de la siguiente manera: S = "1221121221221121122 ..."
Si nos agrupamos en S sucesivas 1 y 2, se convierte en:
22 11 2 1 1 22 1 22 11 2 11 22 ...
Y cada grupo '1' o '2' es el número de ocurrencias de, respectivamente:
1 2 1 2 1 2 1 2 2 1 2 2 ...
Se puede ver el número de ocurrencias de lo anterior es la S en sí.
Dado un número entero N como entrada y devuelve una cadena S número mágico en frente de la N digital de '1'.
Nota: N no será superior a 100.000.
Ejemplo:
Entrada: 6
Salida: 3
Explicación: los seis primeros elementos de cadena mágica S es "12211", que contiene un tres, el flujo vuelve 3.
class Solution {
public int magicalString(int n) {
List<Integer> s2=new ArrayList<Integer>();
s2.add(1);s2.add(-1);s2.add(-1);
int key=1;
for (int i = 2; i < n; i++) {
if(s2.get(i)==1)
s2.add(key);
if(s2.get(i)==-1){
s2.add(key);
s2.add(key);
}
key=-key;
}
key = 0;
for (int i = 0;i<n;i++) {
if(s2.get(i)==1)
key++;
}
return key;
}
}