首页 > 解决方案 > 将所有字符组合插入Java中的字符串

问题描述

我想通过这两个列表: int[] nums = {1, 2, 3, 4, 5}; 和: String[] signs = {"+", "-", "/", "*", "^"}

并使用每个可能的组合产生类似的输出:1 + 2 - 3 * 4 + 5等等,保持相同的顺序,但是嵌套循环不能正常工作,所以我想不出任何方法来做到这一点。我最终也想评估结果,但现在我的目标只是打印组合。

标签: javaloopsmathiteration

解决方案


假设

  1. -不考虑一元
  2. 结果将作为字符串返回。需要后缀转换来评估

解决方案

import java.util.ArrayList;
import java.util.List;

public class Combination {

    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        String[] signs = {"+", "-", "*"};
        List<String> results = new ArrayList<>();
        results.add(String.valueOf(nums[0]));
        for (int index = 1; index < nums.length; index++) {
            final int num = nums[index];
            List<String> temp = new ArrayList<>();
            for (final String sign : signs) {
                for (String result : results) {
                    temp.add(result + sign + num);
                }
            }
            results = temp;
        }
        System.out.println(results);
    }
}

替代建议

将此问题分析为graph问题将有助于我们提出解决方案的基本版本

  • 第一个数字可以认为是根节点
  • 将此节点的每个符号添加一条边到下一个数字(另一个节点)
  • 移动到新节点并重复将不同的边添加到下一个节点。
  • 然后从 root 进行 DFS 遍历并记录从 root 到叶子的所有路径。

推荐阅读