برنامه نویسی

چالش LeetCode: 6. تبدیل زیگزاگ – راه حل جاوا اسکریپت 🚀

مصاحبه برتر 150

مشکل تبدیل زیگزاگ یک چالش جذاب است که توانایی شما را در شبیه سازی الگوها در رشته ها آزمایش می کند. بیایید LeetCode 6: Zigzag Conversion را تجزیه کنیم و آن را به طور موثر حل کنیم.


🚀 شرح مشکل

با توجه به یک رشته s و یک عدد صحیح numRows، ترتیب شخصیت های s به صورت زیگزاگ با تعداد ردیف مشخص شده و آنها را ردیف به ردیف بخوانید.


💡 مثال ها
مثال 1

Input: s = "PAYPALISHIRING", numRows = 3  
Output: "PAHNAPLSIIGYIR"  
Explanation:  
P   A   H   N  
A P L S I I G  
Y   I   R
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال 2

Input: s = "PAYPALISHIRING", numRows = 4  
Output: "PINALSIGYAHRPI"  
Explanation:  
P     I    N  
A   L S  I G  
Y A   H R  
P     I
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال 3

Input: s = "A", numRows = 1  
Output: "A"  
Explanation: Only one row, so no zigzagging.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


🏆 راه حل جاوا اسکریپت

رویکرد

  • ما پیمایش زیگزاگ را به صورت زیر شبیه سازی می کنیم:
    1. با استفاده از آرایه ای از رشته ها (یکی برای هر ردیف).
    2. پیمایش رشته ورودی و الحاق هر کاراکتر به ردیف صحیح.
    3. زمانی که ردیف فعلی در بالا یا پایین باشد، جهت معکوس را انجام دهید.

پیاده سازی

var convert = function(s, numRows) {
    if (numRows === 1 || s.length <= numRows) return s;

    const rows = new Array(numRows).fill('');
    let currentRow = 0;
    let goingDown = false;

    for (let char of s) {
        rows[currentRow] += char;

        if (currentRow === 0 || currentRow === numRows - 1) {
            goingDown = !goingDown;
        }

        currentRow += goingDown ? 1 : -1;
    }

    return rows.join('');
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


🔍 چگونه کار می کند

  1. موارد لبه:

    • اگر numRows 1 است یا طول رشته کمتر از numRows، رشته را همانطور که هست برگردانید (بدون زیگزاگی).
  2. شبیه سازی زیگزاگ:

    • از آرایه ای از رشته ها برای نشان دادن ردیف ها استفاده کنید.
    • رشته ورودی را طی کنید و هر کاراکتر را به ردیف مناسب اضافه کنید.
    • هنگام رسیدن به ردیف بالا یا پایین جهت (بالا یا پایین) را تغییر دهید.
  3. ترکیب ردیف ها:

    • تمام سطرها را در یک رشته به هم متصل کنید تا نتیجه حاصل شود.

🔑 تجزیه و تحلیل پیچیدگی

  • > پیچیدگی زمانی: O(n)، که در آن n طول رشته است. هر شخصیت یک بار بازدید می شود.
  • > پیچیدگی فضا: O(n)، برای ذخیره الگوی زیگزاگ در آرایه سطرها.

📋 دویدن خشک
ورودی: s = "PAYPALISHIRING"، numRows = 4

تبدیل زیگزاگ
خروجی: "PINALSIGYAHRPI"


✨ نکات حرفه ای برای مصاحبه

  • روشن کردن محدودیت‌ها: موارد لبه را تأیید کنید، مانند ورودی تک ردیفی یا رشته‌های کوتاه‌تر از numRows.
  • بهینه سازی برای خوانایی: توضیح دهید که چگونه جهت معکوس الگوی زیگزاگ را تضمین می کند.
  • بحث در مورد مقیاس پذیری: مشخص کنید که چگونه راه حل به طور موثر با رشته های طولانی تر مقیاس می شود.

📚 بیشتر بدانید

توضیح کامل و توضیح کد در پست Dev.to من را بررسی کنید:
👉 کلمات معکوس در یک رشته – راه حل جاوا اسکریپت

چگونه با این مشکل برخورد می کنید؟ بحث کنیم! 🚀

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا