Ovaj se članak temelji na skripti skripta algoritma Free Code Camp "Obrni niz"
Obrtanje niza jedno je od najčešće postavljanih JavaScript pitanja u tehničkom krugu razgovora. Ispitivači mogu tražiti da napišete različite načine za preokretanje niza, ili mogu tražiti da preokrenete niz bez korištenja ugrađenih metoda, ili čak mogu zatražiti da obrnete niz pomoću rekurzije.
Postoje potencijalno deseci različitih načina za to, isključujući ugrađenu funkciju obrnutog , jer je JavaScript nema.
Ispod su moja tri najzanimljivija načina za rješavanje problema obrtanja niza u JavaScript-u.
Izazov algoritma
Obrni pruženi niz.Možda ćete trebati pretvoriti niz u niz da biste ga mogli obrnuti.
Rezultat mora biti niz.
function reverseString(str) { return str; } reverseString("hello");
Dati test slučajevi
- reverseString ("zdravo") trebao bi postati "olleh"
- reverseString ("Howdy") trebao bi postati "ydwoH"
- reverseString ("Pozdrav sa Zemlje") trebao bi vratiti "htraE morf sgniteerG"
1. Obrnite niz s ugrađenim funkcijama
Za ovo rješenje koristit ćemo tri metode: metodu String.prototype.split (), metodu Array.prototype.reverse () i metodu Array.prototype.join ().
- Metoda split () razdvaja objekt String u niz niza razdvajanjem niza u podnizove.
- Metoda reverse () preokreće niz na mjestu. Prvi element niza postaje posljednji, a posljednji postaje prvi.
- Metoda join () spaja sve elemente niza u niz.
function reverseString(str) { // Step 1. Use the split() method to return a new array var splitString = str.split(""); // var splitString = "hello".split(""); // ["h", "e", "l", "l", "o"] // Step 2. Use the reverse() method to reverse the new created array var reverseArray = splitString.reverse(); // var reverseArray = ["h", "e", "l", "l", "o"].reverse(); // ["o", "l", "l", "e", "h"] // Step 3. Use the join() method to join all elements of the array into a string var joinArray = reverseArray.join(""); // var joinArray = ["o", "l", "l", "e", "h"].join(""); // "olleh" //Step 4. Return the reversed string return joinArray; // "olleh" } reverseString("hello");
Povezivanje tri metode zajedno:
function reverseString(str) { return str.split("").reverse().join(""); } reverseString("hello");
2. Preokrenite niz sa smanjenjem petlje
function reverseString(str) { // Step 1. Create an empty string that will host the new created string var newString = ""; // Step 2. Create the FOR loop /* The starting point of the loop will be (str.length - 1) which corresponds to the last character of the string, "o" As long as i is greater than or equals 0, the loop will go on We decrement i after each iteration */ for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; // or newString = newString + str[i]; } /* Here hello's length equals 5 For each iteration: i = str.length - 1 and newString = newString + str[i] First iteration: i = 5 - 1 = 4, newString = "" + "o" = "o" Second iteration: i = 4 - 1 = 3, newString = "o" + "l" = "ol" Third iteration: i = 3 - 1 = 2, newString = "ol" + "l" = "oll" Fourth iteration: i = 2 - 1 = 1, newString = "oll" + "e" = "olle" Fifth iteration: i = 1 - 1 = 0, newString = "olle" + "h" = "olleh" End of the FOR Loop*/ // Step 3. Return the reversed string return newString; // "olleh" } reverseString('hello');
Bez komentara:
function reverseString(str) { var newString = ""; for (var i = str.length - 1; i >= 0; i--) { newString += str[i]; } return newString; } reverseString('hello');
3. Obrni niz s rekurzijom
Za ovo rješenje koristit ćemo dvije metode: metodu String.prototype.substr () i metodu String.prototype.charAt ().
- Metoda substr () vraća znakove u nizu koji počinje na navedenom mjestu kroz navedeni broj znakova.
"hello".substr(1); // "ello"
- Metoda charAt () vraća navedeni znak iz niza.
"hello".charAt(0); // "h"
Dubina rekurzije jednaka je duljini niza. Ovo rješenje nije najbolje i bit će jako sporo ako je String vrlo dugačak i veličina sloga predstavlja glavnu zabrinutost.
function reverseString(str) { if (str === "") // This is the terminal case that will end the recursion return ""; else return reverseString(str.substr(1)) + str.charAt(0); /* First Part of the recursion method You need to remember that you won’t have just one call, you’ll have several nested calls Each call: str === "?" reverseString(str.subst(1)) + str.charAt(0) 1st call – reverseString("Hello") will return reverseString("ello") + "h" 2nd call – reverseString("ello") will return reverseString("llo") + "e" 3rd call – reverseString("llo") will return reverseString("lo") + "l" 4th call – reverseString("lo") will return reverseString("o") + "l" 5th call – reverseString("o") will return reverseString("") + "o" Second part of the recursion method The method hits the if condition and the most highly nested call returns immediately 5th call will return reverseString("") + "o" = "o" 4th call will return reverseString("o") + "l" = "o" + "l" 3rd call will return reverseString("lo") + "l" = "o" + "l" + "l" 2nd call will return reverserString("llo") + "e" = "o" + "l" + "l" + "e" 1st call will return reverserString("ello") + "h" = "o" + "l" + "l" + "e" + "h" */ } reverseString("hello");
Bez komentara:
function reverseString(str) { if (str === "") return ""; else return reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");
Uvjetni (ternarni) operator:
function reverseString(str) { return (str === '') ? '' : reverseString(str.substr(1)) + str.charAt(0); } reverseString("hello");
Obrtanje niza u JavaScript- u mali je i jednostavan algoritam koji se može zatražiti na tehničkom prikazivanju telefona ili tehničkom razgovoru. Možete riješiti ovaj problem kratkim putem ili pristupiti rješavanjem rekurzijom ili još složenijim rješenjima.
Nadam se da vam je ovo pomoglo. Ovo je dio moje serije članaka "Kako riješiti FCC algoritme" o izazovima Algoritma slobodnog koda, gdje predlažem nekoliko rješenja i korak po korak objašnjavam što se događa ispod haube.
Tri načina za ponavljanje niza u JavaScript-u
U ovom ću članku objasniti kako riješiti izazov FreeCodeCampa "Ponovi niz ponavljaj niz". To uključuje ...
Dva načina za potvrđivanje završetka niza u JavaScript-u
U ovom ću članku objasniti kako riješiti izazov "Potvrdi završetak" freeCodeCampa.
Tri načina za faktorizaciju broja u JavaScript-u
Ovaj se članak temelji na skripti za osnovni algoritam Free Code Camp “Faktorizacija broja”
Dva načina za provjeru palindroma u JavaScript-u
Ovaj se članak temelji na skripti skripta algoritma Free Code Camp "Provjeri palindrome".
Tri načina za pronalaženje najduže riječi u nizu u JavaScript-u
Ovaj se članak temelji na skripti za osnovni algoritam Free Code Camp “Pronađi najdužu riječ u nizu”.
Tri načina naslova rečenice u JavaScript-u
Ovaj se članak temelji na skriptiranju osnovnog algoritma Free Code Camp, „Naslov slučaja rečenica“.
Ako imate svoje rješenje ili bilo kakve prijedloge, podijelite ih u nastavku u komentarima.
Ili me možete pratiti na Mediumu , Twitteru, Githubu i LinkedInu , odmah nakon što kliknete zeleno srce ispod ;-)
# Ostanite znatiželjni, # KeepOnHacking & # MakeItHappen!
Resursi
- metoda split () - MDN
- reverzna () metoda - MDN
- metoda join () - MDN
- Duljina niza - MDN
- metoda substr () - MDN
- metoda charAt () - MDN