Tabla de contenido
En segundo lugar, la subcadena menos dividida
1. Calcula los números
Dificultad: fácil
Descripción del Título
Dado un número decimal num, ahora necesita convertirlo a un número binario y devolver el número y la posición de 1.
- n <= 10 ^ 9
Ejemplo
Ejemplo 1:
输入: 10
输出: [2,1,3]
解释: 10转成2进制为1010,总共有2个1,所以ouptput数组第一个是2。然后1的位置是第1个和第3个,所以后续两个数为1,3.
Ejemplo 2:
输入: 7
输出: [3,1,2,3]
解释: 7转成2进制为111,总共有3个1,所以output数组第一个是3。然后的位置是第1个、第2个和第3个,所以后续三个数为1,2,3.
Mi solución:
public class Solution {
/**
* @param num: the num
* @return: the array subject to the description
*/
public int[] calculateNumber(int num) {
int t, x, y = 0, i;
String s = "";
x = num;
while (x != 0) {
t = x % 2;
x /= 2;
if (t == 1)
y++;
s = t + s;
}
// System.out.println(s);
int[] r = new int[y + 1];
r[0] = y;
int j=1;
for (i = 0; i < s.length(); i++) {
if (s.charAt(i) == '1')
r[j++] = i + 1;
}
return r;
}
}
En segundo lugar, la subcadena menos dividida
Dificultad: fácil
Descripción del Título
Dada una cadena que contiene
n
letras minúsculas, la cadena debe dividirse en varias subcadenas continuas, la letra en la subcadena debe ser la misma y el número de letras en la subcadena no excedak
, y generar el número mínimo de subcadena que cumpla con el requisito.Traducción: Dada una cadena que contiene n letras minúsculas, la cadena debe dividirse en varias subcadenas consecutivas, las letras en la subcadena deben ser las mismas y el número de letras en la subcadena no excede k, y la salida satisface el mínimo número de subcadenas necesarias.
- n≤1e5
Ejemplo
Ejemplo 1
输入: s = "aabbbc", k = 2
输出: 4
解释:
划分成 "aa", "bb", "b", "c" 四个子串
Ejemplo 2
输入: s = "aabbbc", k = 3
输出: 3
解释:
划分成 "aa", "bbb", "c" 三个子串
El tema es fácil de entender mirando directamente el ejemplo.
Mi solución:
public class Solution {
/**
* @param s: the string s
* @param k: the maximum length of substring
* @return: return the least number of substring
*/
public int getAns(String s, int k) {
int l = 0, c = 0, i, j;
while (c < s.length() - 1) {
j = c + 1;
i = 1;
while (i < k && j<s.length()-1&&s.charAt(c) == s.charAt(j)) {
j++;
i++;
}
l++;
c += i;
}
if (s.charAt(s.length()-1)!=s.charAt(s.length()-2))
l+=1;
return l;
}
}
Tres, reflejo de espejo
Dificultad: media
Descripción del Título
Hay una habitación cuadrada especial con un espejo en cada pared. Además de la esquina suroeste, cada rincón coloca un receptor, número
0
,1
como bien2
.La longitud de la pared de la habitación cuadrada es
p
, un rayo de láser desde la esquina suroeste se encontrará primero con la pared este, y0
la distancia entre el punto incidente y el receptor esq
.Devuelve el número del receptor que la luz encuentra primero (garantía de que la luz eventualmente encontrará un receptor).
- 1 <= p <= 1000
- 0 <= q <= p
Ejemplo
Ejemplo 1:
输入: p = 2, q = 1
输出: 2
解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 2 。
Ejemplo 2:
输入: p = 3, q = 1
输出: 1
解释: 这条光线在第一次被反射回左边的墙时就遇到了接收器 1 。
La solución puede ser encontrar una regla y descubrir varias situaciones en las que la luz de reflexión especular llega al receptor dibujando una imagen.
p / q = 1, llegar a 1; p / q = 2, llegar a 2; p / q = 3, llegar a 1; p / q = 4, llegar a 2; …… ( División aquí significa división )
Cuando p = 3 y q = 2, p / q = 3/2. ¿A cuál llegar?
La tabla de acción de la mano encontró que llegó a 0.
A partir de esto, se puede pensar que el resultado divisible será 1, e irá al receptor 1; el divisor será 2, que irá al receptor 2; y los demás resultados no divididos irán al receptor 0.
Sin embargo, esto no significa que las tres situaciones hayan sido consideradas en su totalidad, y corresponden a la situación de cada receptor.
Por ejemplo, p = 5, q = 3, p / q = 5/3, en realidad llegará al receptor 1, que no se ajusta a la regla supuesta anterior, ¡así que busque la regla más a fondo!
Encuentra la regla es:
- Cuando p es un número impar y q es un número impar, llega al receptor 1.
- Cuando p es un número impar yq es un número par, llega al receptor 0.
- Cuando p es un número par yq es un número impar, llega al receptor 2.
El caso de que p y q sean números pares se puede reducir a uno par y otro impar, lo que equivale a uno de los casos anteriores.
public class Solution {
/**
* @param p: an integer
* @param q: an integer
* @return: the number of the receptor that the ray meets first
*/
public int mirrorReflection(int p, int q) {
if(p%2==1&&q%2==1)
return 1;
else if(p%2==1&&q%2==0)
return 0;
else
return 2;
}
}
Esta es la primera vez que traté de responder preguntas en programación en línea en Ali Tianchi, y también fue la primera vez que respondí preguntas en Java. Este artículo escribe principalmente sobre la tercera pregunta: el pensamiento y la respuesta a los resultados de la reflexión en espejo. La primera y las segundas preguntas son relativamente simples La respuesta es fácil de ver en el código.
Si cree que es bueno, bienvenido a "un clic, tres vínculos", haga clic en Me gusta, marque como favorito, siga, comente directamente si tiene alguna pregunta, e intercambie y aprenda.
Mi blog de CSDN: https://blog.csdn.net/Charzous/article/details/113444688