Artikelverzeichnis
Anzahl Bits 1
Themenlink: 191. Anzahl Bit 1s
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
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
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 - num
ob 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
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 istDie zweite Methode: Erstellen Sie ein neues Array, durchlaufen Sie dann die
nums1
Summe vonnums2
Anfang 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 einBeachten 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_arr
Die 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 instead
Wenn Sie immer noch nicht verstehen, können Sie nach grundlegenden Typen und Referenztypen suchenDie 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