Takip et

LeetCode Zikzak Dönüşümü: JavaScript Çözümü

LeetCode Zikzak Dönüşümü: JavaScript Çözümü

Merhaba, Fatih Soysal burada! Bu yazımızda, LeetCode’un popüler problemlerinden biri olan “Zigzag Conversion” (Zikzak Dönüşümü) problemine JavaScript ile nasıl çözüm getirilebileceğini detaylı bir şekilde ele alacağız. Bu problem, verilen bir metni zikzak şeklinde düzenleyerek yeni bir metin oluşturmamızı gerektirir. Öncelikle problemi daha iyi anlamak için bir örneğe bakalım.

Problem Tanımı

Verilen bir metin ve satır sayısı ile, metni zikzak şeklinde düzenleyerek yeni bir metin oluşturmamız gerekiyor. Örneğin, “PAYPALISHIRING” metnini 3 satırda zikzak düzenlediğimizde sonuç “PAHNAPLSIIGYIR” olacaktır. Bu nasıl oluyor? İlk satıra ‘P’, ‘A’, ‘H’, ‘N’, ‘A’, ‘P’, ‘I’ yazılır, ikinci satıra ‘Y’, ‘L’, ‘S’, ‘I’, ‘G’ yazılır, üçüncü satıra ise ‘I’, ‘R’ yazılır. Sonra bu satırlar birleştirilerek yeni metin elde edilir.

Problemin zorluğu, bu zikzak düzenini programatik olarak oluşturmaktır. Bu noktada, algoritmik düşünme becerilerimizi kullanmamız gerekiyor. Şimdi gelin, bu problemi nasıl çözebileceğimize bakalım.

JavaScript ile Zikzak Dönüşümü Çözümü

Bu problemi çözmek için birkaç farklı yaklaşım kullanılabilir. Ancak, en verimli ve okunabilir yöntemlerden biri, dizilerin ve döngülerin etkili bir şekilde kullanılmasına dayanır. Aşağıdaki JavaScript kodunda, bu yöntemi görebilirsiniz:


/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
    if (numRows === 1) return s; // Eğer tek satır ise dönüşüm gerekmiyor

    const result = new Array(numRows).fill('');
    let row = 0;
    let down = true;

    for (let i = 0; i < s.length; i++) {
        result[row] += s[i];
        if (down) {
            row++;
            if (row === numRows) {
                row -= 2;
                down = false;
            }
        } else {
            row--;
            if (row === -1) {
                row += 2;
                down = true;
            }
        }
    }

    return result.join('');
};

Bu kod, öncelikle numRows değişkenini kontrol eder. Eğer numRows 1 ise, zikzak dönüşümüne gerek yoktur ve orijinal metin döndürülür. Aksi takdirde, result adında bir dizi oluşturulur ve bu dizi, her bir satırı temsil eder. Ardından, bir döngü ile metin karakterleri işlenir ve her karakter doğru satıra eklenir. down değişkeni, karakterin aşağı mı yoksa yukarı mı hareket ettiğini takip eder. Son olarak, result dizisinin elemanları birleştirilerek zikzak dönüştürülmüş metin elde edilir.

Performans Analizi ve Optimizasyonlar

Yukarıdaki kod, zaman karmaşıklığı O(n) olan doğrusal bir zaman karmaşıklığına sahiptir, burada n metnin uzunluğudur. Bu, oldukça verimli bir çözümdür. Bellek karmaşıklığı da O(n) seviyesindedir. Daha fazla optimizasyon için, özellikle çok büyük metinler için, uzun metinleri parçalara ayırıp işlemek gibi stratejiler düşünülebilir. Ancak bu problem için mevcut çözüm yeterli performans gösterir.

Sonuç

Bu yazıda, LeetCode'un "Zigzag Conversion" problemine JavaScript ile verimli bir çözüm sunmayı amaçladık. Umarım bu makale, hem problemi anlamanıza hem de JavaScript ile etkili kod yazmanıza yardımcı olmuştur. Daha fazla bilgi ve kaynak için fatihsoysal.com adresini ziyaret edebilirsiniz. Ayrıca, bu tür problemlerle daha fazla ilgileniyorsanız, buradaki İngilizce makaleden de faydalanabilirsiniz. Kodlama yolculuğunuza devam ederken başarılar dilerim!

#Etiketler: LeetCode, Zigzag Conversion, JavaScript, Algoritma, Programlama, Kodlama, Zikzak Dönüşümü, Problem Çözme, Web Geliştirme, Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık