Rumah >pembangunan bahagian belakang >Tutorial Python >JUMLAH DUA INTEGER - leetcode - Python

JUMLAH DUA INTEGER - leetcode - Python

Linda Hamilton
Linda Hamiltonasal
2025-01-22 16:11:11598semak imbas

Mari kita sampai ke teras menambah dua integer tanpa menggunakan operator ' '. Ini memerlukan manipulasi binari.

SUM OF TWO INTEGERS - leetcode - Python

Kami akan mendekati ini seperti penambahan biasa, tetapi menggunakan binari.

SUM OF TWO INTEGERS - leetcode - Python

  1. Mula menambah dari kanan, seperti biasa anda lakukan: 1 1, 0 1, 1 0, 0 0.
  2. Memandangkan kami bekerja dalam binari, jika jumlahnya mencapai 2, tetapkan semula kepada 0 (1 1 = 10 binari, menjadi 0 dengan bawa).
  3. Ulangi ini untuk semua bit. Ini memberi kami jumlah separa, mengabaikan bawa buat masa ini.

SUM OF TWO INTEGERS - leetcode - Python

Pengendali bitwise XOR (^) mengendalikan jumlah permulaan ini dengan sempurna:

  • Jika bit adalah sama, hasilnya ialah 0. Jika ia berbeza, hasilnya ialah 1.

Ini sejajar dengan keperluan kami: 1 1 → 0 (dengan pembawa), 0 1 atau 1 0 → 1 dan 0 0 → 0.

Sekarang, mari kita atasi masalahnya. Pengendali DAN (&) membantu kami mencari mereka:

  • Jika kedua-dua bit ialah 1, hasilnya ialah 1 (a carry).

Untuk mengalihkan pembawa ke kiri, kami akan menggunakan anjakan bit kiri.

SUM OF TWO INTEGERS - leetcode - Python

Algoritma:

  1. Permulaan:
    • sum = a ^ b (XOR untuk jumlah tanpa bawa)
    • carry = (a & b) (DAN untuk dibawa)
  2. Lelaran:
    • Ulang sehingga carry == 0:
      • a = sum
      • b = carry << 1 (anjakan bit kiri untuk dibawa)

Contoh (5 3):

  1. Nilai Awal: SUM OF TWO INTEGERS - leetcode - Python
  2. Lelaran 1:
    • sum = 0101 ^ 0011 = 0110
    • carry = 0101 & 0011 = 0001 SUM OF TWO INTEGERS - leetcode - Python
  3. Lelaran 2:
    • sum = 0110 ^ 0010 = 0100
    • carry = 0110 & 0010 = 0010 SUM OF TWO INTEGERS - leetcode - Python
  4. Lelaran 3:
    • sum = 0100 ^ 00100 = 0000
    • carry = 0100 & 0100 = 0100 SUM OF TWO INTEGERS - leetcode - Python
  5. Lelaran 4:
    • sum = 0000 ^ 1000 = 1000
    • carry = 0000 & 1000 = 0000

Bawaan ialah 0, jadi jumlah akhir ialah 1000 (8).

SUM OF TWO INTEGERS - leetcode - Python

Integer tanpa sempadan Python menyebabkan masalah dengan nombor negatif. Peralihan bit kiri boleh membawa kepada pertumbuhan yang tidak terhingga. Untuk membetulkannya, kita perlu mensimulasikan integer bersaiz tetap (cth., 32-bit).

SUM OF TWO INTEGERS - leetcode - Python

Kami akan menggunakan topeng 32-bit (0xFFFFFFFF) untuk mengehadkan bilangan bit:

SUM OF TWO INTEGERS - leetcode - Python

Ini memastikan bahawa hanya 32 bit terakhir dipertimbangkan, menghalang pertumbuhan yang tidak terhingga. Kami juga mengendalikan hasil negatif yang berpotensi dengan menukarnya kepada perwakilan pelengkap dua 32-bit mereka jika perlu.

SUM OF TWO INTEGERS - leetcode - Python

Pendekatan ini secara berkesan mensimulasikan aritmetik integer 32-bit dalam Python, menyelesaikan isu dengan integer tidak terhad dan nombor negatif. Keadaan if a > MAX_INT memastikan bahawa hasilnya kekal dalam julat integer bertanda 32-bit. Contoh dengan -12 dan -8 menunjukkan cara pembetulan ini berfungsi untuk menghasilkan hasil jangkaan -20.

Nama saya Jaimin Bariya, jika anda mendapati sesuatu yang berguna, sila like dan komen, dan ikuti saya di github jaimin-bariya

Atas ialah kandungan terperinci JUMLAH DUA INTEGER - leetcode - Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn