Попробуйте конвертировать код возврата в Java для JavaScript - PullRequest
0 голосов
/ 20 апреля 2019

Вот ответный вопрос вопрос

Я пытался преобразовать это ответов из Java в JavaScript

Java-код

   public class Solution {
        private static final String[] KEYS = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };

        public List<String> letterCombinations(String digits) {
            List<String> ret = new LinkedList<String>();
            combination("", digits, 0, ret);
            return ret;
        }

        private void combination(String prefix, String digits, int offset, List<String> ret) {
            if (offset >= digits.length()) {
                ret.add(prefix);
                return;
            }
            String letters = KEYS[(digits.charAt(offset) - '0')];
            for (int i = 0; i < letters.length(); i++) {
                combination(prefix + letters.charAt(i), digits, offset + 1, ret);
            }
        }
    }

Правильный ответ:

Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Вот мой код:

var letterCombinations = function(digits) {
    // 0, 1 no letters
    global.g_keys = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"];
    let res = [];
    // prefix, digit, index, res
    bt("", digits, 0, res);
    return res;
};

var bt = function(px, d, ind, res) {
    // push when chance?
    if(ind >= d.length) {
        res.push(px);
        return;
    }

    // e.g. 2 -> ["abc"]
    // we use ind+ locally, to travel digits
    let les = g_keys[ parseInt(d[ind]) ];

    // loop abc, same level
    // px, prefix concept
    for(i=0; i<les.length; i++) {
        // ind+1, next level
        bt(px + les[i], d, ind+1, res);
    }
}

моим ответом является

input: 23
output: ["ad","ae","af"]

Есть идеи?

1 Ответ

0 голосов
/ 20 апреля 2019

Мой оригинальный код:

for(i=0; i<les.length; i++) {
        // ind+1, next level
        bt(px + les[i], d, ind+1, res);
    }

Правильный код (добавьте let перед i)

for(let i=0; i<les.length; i++) {
        // ind+1, next level
        bt(px + les[i], d, ind+1, res);
    }
...