Trong bài viết này, tôi sẽ giải thích cách giải quyết vấn đề “Lặp lại một chuỗi lặp lại một chuỗi” của freeCodeCamp” thách đấu. Điều này liên quan đến việc lặp lại một chuỗi một số lần nhất định.
Có ba cách tiếp cận tôi sẽ đề cập:
- sử dụng vòng lặp while
- sử dụng đệ quy
- sử dụng phương thức lặp lại ES6()
Thử thách thuật toán Mô tả
Lặp lại một chuỗi đã cho (đối số đầu tiên)
num
lần (đối số thứ hai). Trả về một chuỗi rỗng nếunum
không phải là số dương.
function repeatStringNumTimes(str, num) {
return str;
}
repeatStringNumTimes("abc", 3);
Các trường hợp thử nghiệm được cung cấp
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 "".
Cách tiếp cận số 1: Lặp lại chuỗi bằng vòng lặp While
Một câu lệnh while thực thi câu lệnh của nó miễn là một điều kiện cụ thể được đánh giá là đúng.
Một tuyên bố trong khi trông như thế này:
while (condition)
statement
với một điều kiện được đánh giá trước mỗi lần đi qua vòng lặp. Nếu điều kiện là đúng, câu lệnh được thực hiện. Nếu điều kiện là sai, thì việc thực thi tiếp tục với bất kỳ câu lệnh nào sau vòng lặp while.
Tuyên bố được thực hiện miễn là điều kiện là đúng. Đây là giải pháp:
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);
Và một lần nữa, không có bình luận:
function repeatStringNumTimes(string, times) {
var repeatedString = "";
while (times > 0) {
repeatedString += string;
times--;
}
return repeatedString;
}
repeatStringNumTimes("abc", 3);
Cách tiếp cận #2: Lặp lại Chuỗi bằng Điều kiện và Đệ quy
Đệ quy là một kỹ thuật để lặp lại một thao tác bằng cách để một hàm gọi chính nó lặp đi lặp lại cho đến khi nó đạt được kết quả. Có một vài tính năng chính của đệ quy phải được đưa vào để nó hoạt động bình thường.
- đầu tiên là một trường hợp cơ bản: đây là một câu lệnh, thường nằm trong mệnh đề điều kiện như
if
điều đó dừng đệ quy. - thứ hai là một trường hợp đệ quy: đây là câu lệnh mà hàm đệ quy được gọi trên chính nó.
Đây là giải pháp:
function repeatStringNumTimes(string, times) {
// Step 1. Check if times is negative and return an empty string if true
if (times < 0) {
return "";
}
// Step 2. Check if times equals to 1 and return the string itself if it's the case.
if (times === 1) {
return string;
}
// Step 3. Use recursion
else {
return string + repeatStringNumTimes(string, times - 1); // return "abcabcabc";
}
/*
First Part of the recursion method
You need to remember that you won’t have just one call, you’ll have several nested calls
times string + repeatStringNumTimes(string, times - 1)
1st call 3 "abc" + ("abc", 3 - 1)
2nd call 2 "abc" + ("abc", 2 - 1)
3rd call 1 "abc" => 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);
Và một lần nữa, không có bình luận:
function repeatStringNumTimes(string, times) {
if(times < 0)
return "";
if(times === 1)
return string;
else
return string + repeatStringNumTimes(string, times - 1);
}
repeatStringNumTimes("abc", 3);
Cách tiếp cận #3: Lặp lại Chuỗi bằng phương thức lặp lại () của ES6
Đối với giải pháp này, bạn sẽ sử dụng phương thức String.prototype.repeat():
- Các
repeat()
phương thức xây dựng và trả về một chuỗi mới chứa số bản sao đã chỉ định của chuỗi mà nó được gọi, nối với nhau.
Đây là giải pháp:
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);
Và một lần nữa, không có bình luận:
function repeatStringNumTimes(string, times) {
if (times > 0)
return string.repeat(times);
else
return "";
}
repeatStringNumTimes("abc", 3);
Bạn có thể sử dụng một toán tử bậc ba như một lối tắt cho câu lệnh if/else, như thế này:
times > 0 ? string.repeat(times) : "";
Điều này có thể được đọc là:
if (times > 0) {
return string.repeat(times);
} else {
return "";
}
Sau đó, bạn có thể trả về toán tử bậc ba trong hàm của mình:
Tôi hy vọng bạn tìm thấy điều này hữu ích. Đây là một phần trong loạt bài viết “Cách giải quyết các thuật toán FCC” của tôi về Các thách thức đối với thuật toán freeCodeCamp, trong đó tôi đề xuất một số giải pháp và giải thích từng bước những gì xảy ra bên trong.
Hai cách để xác nhận kết thúc của Chuỗi trong JavaScript
Trong bài viết này, tôi sẽ giải thích cách giải quyết thử thách “Xác nhận Kết thúc” của freeCodeCamp.
Ba cách để đảo ngược một chuỗi trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Reverse a String”
Ba cách để thừa số hóa một số trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Factorialize a Number”
Hai cách để kiểm tra Palindromes trong JavaScript
Bài viết này dựa trên Free Code Camp Basic Algorithm Scripting “Check for Palindromes”.
Ba cách để tìm từ dài nhất trong chuỗi trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tìm từ dài nhất trong một chuỗi”.
Ba cách đặt tiêu đề cho một câu trong JavaScript
Bài viết này dựa trên Kịch bản thuật toán cơ bản của Free Code Camp “Tiêu đề trường hợp một câu”.
Nếu bạn có giải pháp của riêng mình hoặc bất kỳ đề xuất nào, hãy chia sẻ chúng bên dưới phần bình luận.
Hoặc bạn có thể theo dõi tôi trên Trung bình, TwitterGithub và LinkedInngay sau khi bạn nhấp vào trái tim màu xanh bên dưới 😉
#StayCurious, #KeepOnHacking & #MakeItHappen!