במאמר זה אסביר כיצד לפתור את האתגר "חזור על מחרוזת וחזור על מחרוזת " של freeCodeCamp . זה כולל חזרה על מחרוזת מספר מסוים של פעמים.
ישנן שלוש הגישות שאעסוק בהן:
- באמצעות לולאת זמן
- באמצעות רקורסיה
- באמצעות שיטת ES6 repeat ()
תיאור אתגר האלגוריתם
חזור על מחרוזת נתונה (טיעון ראשון)num
פעמים (טיעון שני). החזר מחרוזת ריקה אם num
אינה מספר חיובי.
function repeatStringNumTimes(str, num) { return str; } repeatStringNumTimes("abc", 3);
מקרי מבחן מסופקים
repeatStringNumTimes("*", 3) should return "***". repeatStringNumTimes("abc", 3) should return "abcabcabc". repeatStringNumTimes("abc", 4) should return "abcabcabcabc". repeatStringNumTimes("abc", 1) should return "abc". repeatStringNumTimes("*", 8) should return "********". repeatStringNumTimes("abc", -2) should return "".
גישה מס '1: חזור על מחרוזת תוך כדי לולאה
משפט זמן מה מבצע את הצהרתו כל עוד תנאי מוגדר מוערך לאמיתי.
הצהרת זמן נראית כך:
while (condition) statement
עם תנאי אשר מוערך לפני כל מעבר דרך הלולאה. אם התנאי נכון, ההצהרה מבוצעת. אם התנאי שגוי, הביצוע ממשיך בכל הצהרה לאחר לולאת הזמן.
ההצהרה מבוצעת כל עוד התנאי אמיתי. להלן פיתרון:
function repeatStringNumTimes(string, times) { // Step 1. Create an empty string that will host the repeated string var repeatedString = ""; // Step 2. Set the While loop with (times > 0) as the condition to check while (times > 0) { // As long as times is greater than 0, the statement is executed // The statement repeatedString += string; // Same as repeatedString = repeatedString + string; times--; // Same as times = times - 1; } /* While loop logic Condition T/F repeatedString += string repeatedString times First iteration (3 > 0) true "" + "abc" "abc" 2 Second iteration (2 > 0) true "abc" + "abc" "abcabc" 1 Third iteration (1 > 0) true "abcabc" + "abc" "abcabcabc" 0 Fourth iteration (0 > 0) false } */ // Step 3. Return the repeated string return repeatedString; // "abcabcabc" } repeatStringNumTimes("abc", 3);
ושוב, ללא הערות:
function repeatStringNumTimes(string, times) { var repeatedString = ""; while (times > 0) { repeatedString += string; times--; } return repeatedString; } repeatStringNumTimes("abc", 3);
גישה מס '2: חזור על מחרוזת באמצעות תנאי ורקורסיה
רקורסיה היא טכניקה לאיטרציה על פני פעולה על ידי כך שפונקציה קוראת לעצמה שוב ושוב עד שהיא מגיעה לתוצאה. יש כמה תכונות עיקריות של רקורסיה שיש לכלול על מנת שהיא תפעל כראוי.
- הראשון הוא מקרה בסיסי : זו אמירה, בדרך כלל בסעיף מותנה כמו
if
, שעוצרת את הרקורסיה. - השני הוא מקרה רקורסיבי : זו האמירה שבה נקראת על עצמה הפונקציה הרקורסיבית.
להלן פיתרון:
function repeatStringNumTimes(string, times) { // Step 1. Check if times is negative and return an empty string if true if (times if (times === 1) return string; 4th call 0 "" => if (times <= 0) return ""; Second part of the recursion method 4th call will return "" 3rd call will return "abc" 2nd call will return "abc" 1st call will return "abc" The final call is a concatenation of all the strings return "abc" + "abc" + "abc"; // return "abcabcabc"; */ } repeatStringNumTimes("abc", 3);
ושוב, ללא הערות:
function repeatStringNumTimes(string, times) { if(times < 0) return ""; if(times === 1) return string; else return string + repeatStringNumTimes(string, times - 1); } repeatStringNumTimes("abc", 3);
גישה מס '3: חזור על מחרוזת בשיטת ES6 repeat ()
לפתרון זה, תשתמש בשיטת String.prototype.repeat ():
repeat()
בונה שיטה ומחזירה מחרוזת חדשה המכילה את מספר מסוים של עותקים של המחרוזת שעליה הוא נקרא, בשרשור יחד.
להלן פיתרון:
function repeatStringNumTimes(string, times) { //Step 1. If times is positive, return the repeated string if (times > 0) { // (3 > 0) => true return string.repeat(times); // return "abc".repeat(3); => return "abcabcabc"; } //Step 2. Else if times is negative, return an empty string if true else { return ""; } } repeatStringNumTimes("abc", 3);
ושוב, ללא הערות:
function repeatStringNumTimes(string, times) { if (times > 0) return string.repeat(times); else return ""; } repeatStringNumTimes("abc", 3);
אתה יכול להשתמש באופרטור שלישית כקיצור דרך למשפט if / else, כך:
times > 0 ? string.repeat(times) : "";
ניתן לקרוא זאת כ:
if (times > 0) { return string.repeat(times); } else { return ""; }
לאחר מכן תוכל להחזיר את האופרטור השלישי בתפקידך:
אני מקווה שמצאת את זה מועיל. זה חלק מסדרת המאמרים שלי "כיצד לפתור אלגוריתמים של FCC" על אתגרי האלגוריתם freeCodeCamp, שם אני מציע מספר פתרונות ומסביר צעד אחר צעד מה קורה מתחת למכסה המנוע.
שתי דרכים לאשר את סיום המחרוזת ב- JavaScript
במאמר זה אסביר כיצד לפתור את האתגר "אשר את הסיום" של freeCodeCamp.
שלוש דרכים להפוך מחרוזת ב- JavaScript
מאמר זה מבוסס על תסריט סקריפט אלגוריתם בסיסי של Free Code Camp "הפוך מחרוזת"
שלוש דרכים לפקטור מספר ב- JavaScript
מאמר זה מבוסס על כתיבת תסריט אלגוריתם בסיסי בקוד Free Camp "לפקטוריזציה של מספר"
שתי דרכים לבדיקת palindromes ב- JavaScript
מאמר זה מבוסס על סקריפטים בסיסיים של אלגוריתמים בסיסיים בקוד Free Camp "בדוק אם מדובר בפלינדרומים".
שלוש דרכים למצוא את המילה הארוכה ביותר במחרוזת ב- JavaScript
מאמר זה מבוסס על תסריט תסריט אלגוריתם בסיסי של Free Code Camp "מצא את המילה הארוכה ביותר במחרוזת".
שלוש דרכים לכותרת מקרה משפט ב- JavaScript
מאמר זה מבוסס על תסריט תסריט אלגוריתם בסיסי של Free Code Camp "כותרת מקרה משפט".
אם יש לך פתרון משלך או הצעות כלשהן, שתף אותם למטה בתגובות.
או שאתה יכול לעקוב אותי בינוני , טוויטר, Github ו LinkedIn , מיד לאחר הלחיצה על הלב הירוק מתחת ;-)
# StayCurious, # KeepOnHacking & # MakeItHappen!
משאבים נוספים
- תוך לולאה - MDN
- שיטת חזור () - MDN
- רקורסיה - MDN
- מפעיל טריניארי - MDN