【问题标题】:Inserting all combinations of characters into a string in Java将所有字符组合插入Java中的字符串
【发布时间】:2021-01-31 21:32:45
【问题描述】:

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

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

【问题讨论】:

  • 欢迎来到 SO。你需要问一个具体的问题才能得到答案。人们不是来为你解决整个问题的。

标签: java loops math iteration


【解决方案1】:

假设

  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 问题将有助于我们提出解决方案的基本版本

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

【讨论】:

  • 与 BFS 相比,使用 DFS 有什么优势吗?
  • 另外,将其视为图形有什么好处?
  • @OctopuSS7,将其视为图问题的好处是,它易于可视化构造和遍历技术。 1. 使用水平顺序遍历构造图。将第一个节点添加为根。将第二个节点添加到下一级,并将所有可能的边从第一个节点添加到第二个节点。在下一级添加第三个节点,并添加从第二到第三的所有可能的边。同样继续。 2. DFS 遍历是上述构造图的自然技术,因为我们需要每个可能的完整表达式,而 DFS 正是这样做的。 BFS/级别顺序(类似于我的代码)不直观。
猜你喜欢
  • 2020-07-28
  • 1970-01-01
  • 2017-11-11
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多