Python-Übungen zu grundlegender Grammatik und Datenstruktur – Tag 01

Anzahl Bits 1

Themenlink: 191. Anzahl Bit 1s

Bild-20220418130207555

Bei dieser Frage wird eine Dezimalzahl übergeben. Wir müssen sie zuerst in eine Binärzahl umwandeln und dann die Anzahl jeder Ziffer zählen.

Es gibt viele Methoden zum Konvertieren in Binärdateien, die häufig verwendet werden

  • Kreisteilung durch 2
  • UND-Verknüpfung mit 2 hoch n-ter Potenz

Hier ist die zweite Methode

# -*- 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

Die Differenz zwischen der Summe der Produkte der ganzen Zahlen

Themenlink: 1281. Die Differenz zwischen der Summe der Produkte der ganzen Zahlen

Bild-20220418130520525

Diese Frage ist auch relativ einfach, verwenden Sie einfach Simulationsstatistiken direkt und vergessen Sie nicht, n zu aktualisieren, da dies sonst in eine Endlosschleife eintritt

# -*- 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

Summe zweier Zahlen

Themenverbindung: 1. Die Summe zweier Zahlen

Bild-20220418130738948

Die Summe zweier Zahlen, wo Träume beginnen hhh

Für diese Frage können Sie das Wörterbuch direkt verwenden, um die Entsprechung zwischen ganzzahligen Werten und ihren Indizes zu speichern. Überprüfen Sie für jeden Wert, target - numob er im Wörterbuch erschienen ist. Wenn es erscheint, bedeutet dies, dass die Antwort gefunden wurde, und Sie können es direkt zurückgeben.

Da der Titel bereits sagt, dass es eine Antwort geben muss, muss das Ergebnis vor dem Ende der Schleife gefunden werden, sodass keine abnormale Ausgabe erforderlich ist

# -*- 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

Zwei sortierte Arrays zusammenführen

Themenlink: 88. Zwei sortierte Arrays zusammenführen

Bild-20220418130950065

Es gibt viele Methoden für diese Frage, ich werde sie hier ein wenig erwähnen.

  • Die erste Methode: Das Array zwei direkt hinter das Array eins setzen und dann die sort()Funktion sort aufrufen, was sehr einfach zu verstehen ist

  • Die zweite Methode: Erstellen Sie ein neues Array, durchlaufen Sie dann die nums1Summe von nums2Anfang an und fügen Sie sie dann weiter in das neu erstellte Array ein und fügen Sie schließlich jedes Bit des neuen Arrays in nums1 ein

    Beachten Sie, dass hier jedes Bit eingefügt werden muss. Die korrekte Schreibweise ist: nums1[:] = new_arr[:], aber es kann nicht geschrieben werden als: nums1 = new_arrDie erste Schreibweise besteht darin, das Element an der Position zu ändern, auf die nums1 zeigt, was im Titel beschrieben ist Die zweite Möglichkeit besteht darin, nums1 auf einen anderen Ort zu verweisen, aber den Wert des ursprünglichen Punkts von nums1 nicht zu ändern . in-place insteadWenn Sie immer noch nicht verstehen, können Sie nach grundlegenden Typen und Referenztypen suchen

  • Die dritte Methode: Durchlaufen Sie die beiden Arrays in umgekehrter Reihenfolge, finden Sie das größere und fügen Sie es direkt am Ende von nums1 ein

Der folgende Code ist die dritte Methode

# -*- 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

Ich denke du magst

Origin blog.csdn.net/qq_46311811/article/details/124247245
Empfohlen
Rangfolge