چالش 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.
🏆 راه حل جاوا اسکریپت
رویکرد
- ما پیمایش زیگزاگ را به صورت زیر شبیه سازی می کنیم:
- با استفاده از آرایه ای از رشته ها (یکی برای هر ردیف).
- پیمایش رشته ورودی و الحاق هر کاراکتر به ردیف صحیح.
- زمانی که ردیف فعلی در بالا یا پایین باشد، جهت معکوس را انجام دهید.
پیاده سازی
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('');
};
🔍 چگونه کار می کند
-
موارد لبه:
- اگر
numRows
1 است یا طول رشته کمتر ازnumRows
، رشته را همانطور که هست برگردانید (بدون زیگزاگی).
- اگر
-
شبیه سازی زیگزاگ:
- از آرایه ای از رشته ها برای نشان دادن ردیف ها استفاده کنید.
- رشته ورودی را طی کنید و هر کاراکتر را به ردیف مناسب اضافه کنید.
- هنگام رسیدن به ردیف بالا یا پایین جهت (بالا یا پایین) را تغییر دهید.
-
ترکیب ردیف ها:
- تمام سطرها را در یک رشته به هم متصل کنید تا نتیجه حاصل شود.
🔑 تجزیه و تحلیل پیچیدگی
- > پیچیدگی زمانی:
O(n)
، که در آن n طول رشته است. هر شخصیت یک بار بازدید می شود. - > پیچیدگی فضا:
O(n)
، برای ذخیره الگوی زیگزاگ در آرایه سطرها.
📋 دویدن خشک
ورودی: s = "PAYPALISHIRING"
، numRows = 4
خروجی: "PINALSIGYAHRPI"
✨ نکات حرفه ای برای مصاحبه
- روشن کردن محدودیتها: موارد لبه را تأیید کنید، مانند ورودی تک ردیفی یا رشتههای کوتاهتر از
numRows
. - بهینه سازی برای خوانایی: توضیح دهید که چگونه جهت معکوس الگوی زیگزاگ را تضمین می کند.
- بحث در مورد مقیاس پذیری: مشخص کنید که چگونه راه حل به طور موثر با رشته های طولانی تر مقیاس می شود.
📚 بیشتر بدانید
توضیح کامل و توضیح کد در پست Dev.to من را بررسی کنید:
👉 کلمات معکوس در یک رشته – راه حل جاوا اسکریپت
چگونه با این مشکل برخورد می کنید؟ بحث کنیم! 🚀