Directorio de artículos
número de bits 1
Enlace temático: 191. Número de bits 1
En esta pregunta, se pasa un número decimal. Primero debemos convertirlo en binario y luego contar el número de cada dígito.
Hay muchos métodos para convertir a binario, los más utilizados son
- División circular por 2
- Operación AND con 2 elevado a la n-ésima potencia
Aquí está el segundo método.
# -*- coding:utf-8
"""
作者: Jia
日期: 2022年04月18日
描述: https://leetcode-cn.com/problems/number-of-1-bits/
"""
class Solution:
def hammingWeight(self, n: int) -> int:
ans = sum(1 for i in range(32) if n & (1 << i))
return ans
La diferencia entre la suma de los productos de los números enteros
Enlace temático: 1281. La diferencia entre la suma de los productos de los números enteros
Esta pregunta también es relativamente simple, solo use las estadísticas de simulación directamente y, finalmente, no olvide actualizar n, de lo contrario, ingresará en un ciclo infinito
# -*- coding:utf-8
"""
作者: Jia
日期: 2022年04月18日
描述: https://leetcode-cn.com/problems/subtract-the-product-and-sum-of-digits-of-an-integer/
"""
class Solution:
def subtractProductAndSum(self, n: int) -> int:
product_val = 1
sum_val = 0
while n > 0:
val = n % 10
product_val *= val
sum_val += val
n = n // 10
return product_val - sum_val
suma de dos numeros
Conexión del tema: 1. La suma de dos números
La suma de dos números, donde empiezan los sueños hhh
Para esta pregunta, puede usar directamente el diccionario para almacenar la correspondencia entre los valores enteros y sus subíndices. Para cada valor, verifique
target - num
si ha aparecido en el diccionario. Si aparece, significa que se ha encontrado la respuesta y Puedes devolverlo directamente.Dado que el título ya ha dicho que debe haber una respuesta, el resultado debe encontrarse antes del final del bucle, por lo que no hay necesidad de una salida anormal.
# -*- coding:utf-8
"""
作者: Jia
日期: 2022年04月18日
描述: https://leetcode-cn.com/problems/two-sum/
"""
from typing import List
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
d = dict()
for i, num in enumerate(nums):
if (target - num) in d:
return [d[target - num], i]
d[num] = i
Combinar dos matrices ordenadas
Enlace a tema: 88. Combinar dos matrices ordenadas
Hay muchos métodos para esta pregunta, lo mencionaré un poco aquí.
El primer método: coloque directamente la matriz dos detrás de la matriz uno y luego llame a la
sort()
función para ordenar, lo cual es muy fácil de entender.El segundo método: cree una nueva matriz, luego recorra la
nums1
suma desdenums2
el principio y luego siga insertándola en la matriz recién creada, y finalmente coloque cada bit de la nueva matriz en nums1Tenga en cuenta que cada bit se debe poner aquí. La forma correcta de escribirlo es:
nums1[:] = new_arr[:]
, pero no se puede escribir como:nums1 = new_arr
La primera forma de escribir es modificar el elemento en la posición señalada por nums1, que se describe en el título La segunda forma es apuntar nums1in-place instead
a otro lugar, pero no modificó el valor del punto original de nums1, si aún no puede entender, puede buscar tipos básicos y tipos de referencia.El tercer método: recorrer las dos matrices en orden inverso, encontrar la más grande e insertarla directamente al final de nums1
El siguiente código es el tercer método.
# -*- coding:utf-8
"""
作者: Jia
日期: 2022年04月18日
描述: https://leetcode-cn.com/problems/merge-sorted-array/
"""
from typing import List
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
idx1 = m - 1
idx2 = n - 1
idx = idx1 + idx2 + 1
while idx2 >= 0 and idx1 >= 0:
if nums1[idx1] > nums2[idx2]:
nums1[idx] = nums1[idx1]
idx1 -= 1
else:
nums1[idx] = nums2[idx2]
idx2 -= 1
idx -= 1
# 把 nums2 剩余的元素加入 nums1 中
while idx2 >= 0:
nums1[idx2] = nums2[idx2]
idx2 -= 1