Умножить несколько строк - PullRequest
0 голосов
/ 14 апреля 2019

Я сталкивался с таким вопросом:

Учитывая

{1, 2, 3}{a, b} 

конвертировать в

1a, 1b, 2a, 2b, 3a, 3b

Может быть любое количество фигурных скобок. Ввод будет в виде списка> или многомерного массива. Я могу думать только о наличии нескольких циклов for и умножении строк друг на друга.

Может кто-нибудь помочь мне с вопросом лучше?

Я попытался создать несколько циклов для каждой строки с {}, но это не будет хорошим решением, если у нас будет больше фигурных скобок

1 Ответ

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

Как насчет этого.

  • Сначала вы конвертируете вход ("{1,2,3}{a,b}{X,Y}") в "1,2,3}{a,b}{X,Y"
  • Затем вы конвертируете это в String[]: ["1,2,3","a,b","X,Y"]
  • Наконец, вы конвертируете это в List: {["1","2","3"],["a","b"],["X","Y"]}

Что вы делаете дальше, это то, что вы умножаете первые два элемента и добавляете результат умножения в конециз списка.Вы продолжаете делать это, пока не останется только один элемент: конечный результат.Итак:

  • {["1","2","3"],["a","b"],["X","Y"]} становится {["X", "Y"],["1a", "1b", "2a", "2b", "3a", "3c"]}
  • {["X", "Y"],["1a", "1b", "2a", "2b", "3a", "3c"]} становится {["X1a", "X1b", "X2a", "X2b", "X3a", "X3b", "Y1a", "Y1b", "Y2a", "Y2b", "Y3a", "Y3b"]}

    public static void main(String[] args) {
        String input = "{1,2,3}{a,b}{X,Y}";
        System.out.println(multiplyAll(input));
    }
    
    public static String multiplyAll(String input) {
        String[] parts = input.substring(1, input.length() - 1).split("\\}\\{");
        List<String[]> elements = new ArrayList<>();
        for (String part: parts) {
            elements.add(part.split(","));
        }
        while (elements.size() > 1) {
            String[] parts1 = elements.remove(0);
            String[] parts2 = elements.remove(0);
            elements.add(multiply(parts1, parts2));
        }
        String result = "";
        for (String element: elements.get(0)) {
            result += element + ",";
        }
        return result.substring(0, result.length() - 1);
    }
    
    public static String[] multiply(String[] parts1, String[] parts2) {
        String[] result = new String[parts1.length * parts2.length];
        for (int i = 0; i < parts1.length; i++) {
            for (int j = 0; j < parts2.length; j++) {
                result[i * parts2.length + j] = parts1[i] + parts2[j];
            }
        }
        return result;
    }
    
...