首页 > 解决方案 > 如何创建字符串或字符类型的二维列表?

问题描述

所以我试图在 leetcode 上解决这个问题——

https://leetcode.com/problems/letter-combinations-of-a-phone-number/

现在我想创建一个二维字符串列表,使我的“2”对应于 a,b,c ,“3”对应于 d,e,f.... 以此类推我的二维列表看起来像这样 - [[a,b,c],[d,e,f].....[w,x,y,z]] 或者我们可以说每个字符串角色可以被视为一个角色,它看起来像这样 -

美国广播公司

定义

. . . . .

wxyz

但我无法这样做。我尝试了各种方法,例如-

1.

List<String> str = new ArrayList<String>();
       str.add("abc");
       digitMap.add(0,str);
       str.set(0,"def");
       digitMap.add(1,str);
       str.set(0,"ghi");
       digitMap.add(2,str);

通常,当我想传递二维列表中的任何值时,我首先创建一个一维列表并在二维列表中传递它的引用,然后清空一维列表,但是当 str 作用时这些值被覆盖引用和对其所做的任何更改都将在 digitMap 中可见,因此所有行都将具有上次在 str 中输入的相同值,因此此方法失败。

  1. 我试图创造
List<List<String[]>> digitMap = new ArrayList<>();

这样每个 List 都包含一个 String [] 类型的数组。

但无法存储 List 类型为 String[] 类型的值。

我知道我们可以使用 HashMap 将其存储为 (Key,Value) 格式,但我希望在 List Interface 上有一个正确的命令。

我真的迷失在实施部分。如果有人向我建议一个链接,我可以用外行术语深入了解 Java 中的集合,那将是非常有帮助的。

标签: javarecursioncollections

解决方案


试试这个解决方案。看看它是如何工作的:

final char[][] L = {{},{},{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},
{'m','n','o'},{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}};

public List<String> letterCombinations(String D) {
    int len = D.length();
    List<String> ans = new ArrayList<>();
    if (len == 0) return ans;
    bfs(0, len, new StringBuilder(), ans, D);
    return ans;
}

public void bfs(int pos, int len, StringBuilder sb, List<String> ans, String D) {
    if (pos == len) ans.add(sb.toString());
    else {
        char[] letters = L[Character.getNumericValue(D.charAt(pos))];
        for (int i = 0; i < letters.length; i++)
            bfs(pos+1, len, new StringBuilder(sb).append(letters[i]), ans, D);
    }
}

推荐阅读