Ejercicios básicos de gramática y estructura de datos de Python--day01

número de bits 1

Enlace temático: 191. Número de bits 1

imagen-20220418130207555

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

imagen-20220418130520525

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

imagen-20220418130738948

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 - numsi 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

imagen-20220418130950065

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 nums1suma desde nums2el principio y luego siga insertándola en la matriz recién creada, y finalmente coloque cada bit de la nueva matriz en nums1

    Tenga 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_arrLa 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 nums1 in-place insteada 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

Supongo que te gusta

Origin blog.csdn.net/qq_46311811/article/details/124247245
Recomendado
Clasificación