알고리즘 문제풀이 3
telephoneword 문제
recursion 활용한 또 다른 문제
이것도 가위바위보 문제의 변형으로 생각하고 풀면 될듯하다.
/*
* Each number key on a standard phone keypad has a set of Latin letters written on
* it as well: http://en.wikipedia.org/wiki/File:Telephone-keypad2.svg
*
* Businesses often try to come up with clever ways to spell out their phone number
* in advertisements to make it more memorable. But there are a lot of combinations!
*
* Write a function that takes up to four digits of a phone number, and
* returns a list of all of the words that can be written on the phone with
* that number. (You should return all permutations, not only English words.)
*
* Example:
* telephoneWords('2745');
* => ['APGJ',
* 'APGK',
* 'APGL',
* ..., // many many more of these
* 'CSIL']
*
* Tips:
* - Phone numbers are strings! (A phone number can start with a zero.)
* - The digits 0 and 1 do not have letters associated with them, so they should be left as numbers.
* - Don't return every combination of those digits in any order, just the order given.
*
* Extra credit: There's a list of English dictionary words at /usr/share/dict/words .
* Why not filter your results to only return words contained in that file?
*
var phoneDigitsToLetters = {
0: "0",
1: "1",
2: "ABC",
3: "DEF",
4: "GHI",
5: "JKL",
6: "MNO",
7: "PQRS",
8: "TUV",
9: "WXYZ",
};
*/
var telephoneWords = function (digitString) {
let results = [];
function recur(res2, count) {
if (count === digitString.length) {
results.push(res2.join(""));
//가위바위보랑 달리, 각 문자들을 문자열로 합해줘야해서 join을 써줬다.
} else {
let i = count;
//가위바위보는 for문을 써서, 재귀함수 돌때마다 다시 첫 문자들을 합쳐줬는데, 해당 문제는 주어진 인자에서 다시 앞으로 돌아가면 안된다.
let chars = phoneDigitsToLetters[digitString[i]].split("");
chars.forEach((ele) => {
recur(res2.concat(ele), count + 1);
});
}
}
recur([], 0);
return results;
};
Author And Source
이 문제에 관하여(알고리즘 문제풀이 3), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyunju-song/알고리즘-문제풀이-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)