Gelen bu LeetCode meydan birlikte iki sayıyı eklemek istenir. Basit mi görünüyor? Öyle değil. Tabii ki, sayfada anlatılandan çok daha basit, ama sanırım bu bir fikir meselesi… ancak önce resmi olanı okumanızı tavsiye ederim.
Baş ağrısı? İyi şeyler. İşte benim çevirim: Her biri bir sayıyı ters sırada temsil eden iki bağlantılı liste verildiğinde, bunları birbirine ekleyin ve yanıtı aynı biçimde (ters sıralı bağlantılı bir liste) döndürün.
Bu sorudaki ilk içgüdüm, bağlantılı listeleri sayısal benzerlerine dönüştürmek, tersine çevirmek, bunları bir araya getirmek, yanıtı ters sıralı bir bağlantılı listeye dönüştürmek ve sonra geri döndürmekti. İşte bulduğum şey:
İlk önce, ters sıralı bağlantılı bir listeyi bir rakam dizisine dönüştürmek için bir fonksiyon oluşturuyoruz, buna biz de bunu adlandırıyoruz
ConvertReverseListNodeToArray. Bu işlevin yaptığı şey, bağlantılı bir listeyi almak ve listenin sonuna gelene kadar özyinelemeli olarak ilerleyerek her bir değeri bir diziye ekleyerek ilerlemesidir. Ek olarak, her katmanı listedeki bir sonraki katmanın arkasına eklediğimiz için, (kasıtlı olarak) orijinal sırayı tersine çeviriyoruz.
Daha sonra, yukarıdaki işlevi kullanarak her iki listeyi de
.join()sayılara dönüştürüyoruz ve sayısal cevabı elde etmek için onları bir araya getiriyoruz… bunu şimdi ters sıralı bir bağlantılı listeye dönüştürmemiz gerekiyor.
İlk olarak, geri uzatmada, daha kolay geçiş için toplam sayıyı bir diziye dönüştürüyoruz. Daha sonra, her numara için bir ListNode oluşturarak ve onu genel bir bağlantılı listeye ekleyerek dizide döngü yaparız. Bir kez daha, bunu yaptığımız sıra nedeniyle, yeni liste orijinal dizinin (kasıtlı olarak) tersine çevrilmiş bir versiyonu olarak sonuçlanıyor.
İşte karşınızda, probleme biraz açık ve daha matematiksel bir yaklaşım var.
Bu yaklaşım, LeetCode kullanıcısı cosde tarafından yayınlanan bir çözüme dayanmaktadır . Tüm liste öğeleri geçilene kadar devam eden bir while döngüsü çalıştırarak çalışır. Her yinelemede, iki değeri birbirine ekler, bir taşıma değeri olup olmadığını kontrol eder (toplam 10'u aşarsa) ve öyleyse bir sonraki yinelemeye geçirir. Çok zarif ve okunaklı:
Gerçekten sevdiğim bir başka yaklaşım, isteğe bağlı bir parametre ile özyinelemeli bir işlev kullanmaktı. Bu yaklaşım ilk olarak anhduc130 tarafından yayınlandı , tek değişikliklerim okunabilirliği artırmaktı. Yukarıdaki while döngüsü yaklaşımına benzer, ancak… while döngüsü olmadan!
Bu yaklaşımın çalışma şekli
arguments, işlev başlığında belirtilmemiş olsalar bile, bir işleve aktarılan tüm argümanları içeren JavaScript nesnesini kullanmasıdır . Bunun önemli olmasının nedeni, LeetCode'un işlev başlığını zaten belirtmesidir ve bu değiştirilemez, ancak arguments değişkenini kullanarak bunu aşabiliriz. Şimdi, yukarıdaki çözüme yapılan yorumlarda yayınlandığı gibi, bu yaklaşımla ilgili olası uç durum sorunları var, ancak LeetCode'u geçiyor ve gerçekten harika görünüyor:
İşlevin her çağrısı için, önce iki ListNode'un değerlerini (eğer varsa) ve önceki bir çalıştırmadan taşınan herhangi bir değeri (yine varsa) ekler ve ardından işlevi bir sonraki seviyede tekrar çağırır. ListNodes (eğer bunlar (eğer isteğe bağlı olarak bir taşıma değer geçirerek ana kadar), aynı zamanda ilave edilecek olan bu mevcut!).
Giriş Kısa bir süre önce Keystone.js CMS'ye dayalı bir sistem üzerinde çalışıyordum.
NGINX Sunucu Güvenliğinizi nasıl güvence altına alacağınıza dair kısa bir kılavuz, giderek daha önemli hale geliyor. Modern yazılımlar, güvenli yazılım geliştirmemize yardımcı olma konusunda giderek daha iyi hale geliyor, ancak çoğunlukla ürünlerimiz için daha fazla güvenlik elde etmek için ekstra çaba sarf etmemiz gerekiyor.
Gündem: Giriş: TL; Ama okuyabilirim: A / B testi, CloudFront ve Lamba @ edge hakkında zaten bilginiz varsa, AWS Lambda @ edge ile doğrudan A / B testine gidin. A / B testi nedir? A / B testi, kullanıcıların bir web sitesinin iki farklı versiyonunun katılımını karşılaştırmaya odaklanan bir UX araştırma metodolojisidir.
Bugün AppStore'daki birçok uygulama, tablo görünümünü kaydırırken içeriği tablo görünümü başlığındaki ölçekleme gibi davranışlara sahiptir. Bu tür davranışlara nasıl ulaşabileceğimizin en basit yaklaşımını size göstereceğim.
İlk blogumda söz verdiğim gibi 'DOM Nedir?' burada 'DOM işleme' üzerine bir blog var. Bu blogda DOM'a daha fazla dalacağız ve DOM işlemenin ne olduğunu ve nasıl yapıldığını öğreneceğiz.
Node.js'de akışların nasıl çalıştığını hiç merak ettiniz mi? Sahiptim.