给出integers中的arraynum.

我需要写一个函数public static int printExpr(int[] a, int num)

该函数应该打印所有combinations,可以给出+-运算符的数字num,并返回combinations的数字.

答案应该是recursive

例如,对于given array人:

{1, 3, 6, 2}num=4

输出应为:

+3+1=4
+6-3+1=4
+2+3-1=4
+2+6-3-1=4
-2+6=4

5

My attempt:

    public static void main(String[] args) {
        int[] a = {1, 3, 6, 2};
        System.out.println("\n" + printExpr(a, 4));
    }

    public static int printExpr(int[] a, int num) {
        return printExpr(a, num, 0, 0, "");
    }

    public static int printExpr(int[] a, int num, int i, int sum, String s) {
        if (i < 0 || i >= a.length)
            return 0;
        if (num == sum) {
            System.out.println(s+"=4");
            return 1 +  printExpr(a, num, i , 0,  "") ;

        }
        return printExpr(a, num, i + 1, sum, s + "")+printExpr(a, num, i + 1, sum + a[i], s + "+" + a[i]) + printExpr(a, num, i + 1, sum - a[i], s + "-" + a[i]) ;
    }

My output:

+1+3=4
+1-3+6=4

2

我认为这类问题是SubsetSum.

我错过了什么?

不允许使用NoteLinkedListHashSet等.

推荐答案

public static int printExpr(int[] a, int num) {
        return printExpr(a, num, 0, 0, "");
    }

    public static int printExpr(int[] a, int num, int i, int sum, String s) {
        if (i < 0 || i >= a.length){
            if (num == sum) {
                System.out.println(s + "=4");
                return 1;
            }
            return 0;
        }

        if (num == sum) {
            System.out.println(s+"=4");
            return 1;
        }

        return printExpr(a, num, i + 1, sum, s)+printExpr(a, num, i + 1, sum + a[i], s + "+" + a[i]) + printExpr(a, num, i + 1, sum - a[i], s + "-" + a[i]) ;
    }

输出:

+6-2=4
+1+3=4
+1-3+6=4
-1+3+2=4
-1-3+6+2=4

5

Java相关问答推荐

具有额外列的Hibert多对多关系在添加关系时返回NonUniqueHealthExcellent

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

Java函数式编程中的双值单值映射

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

我需要生成一个文件来整合每个特性执行的所有JSON结果

如何才能使我的程序不会要求两次输入?

将关键字与正文中的_Allowed匹配,但带有__Signing可选后缀

在Java中,如何按一个属性升序,然后按另一个属性降序对对象列表进行排序?

Javadoc在方法摘要中省略方法

匹配一组字符或另一组字符

如果按钮符合某些期望,如何修改它的文本?

如何生成指定范围内的11位序列号?

Android Studio模拟器没有互联网

JXBrowser是否支持加载Chrome扩展?

在单例类上获取Java锁,了解原因

谷歌应用引擎本地服务器赢得';t在eclipse上运行

如何显示新布局

将Optionals/null安全添加到嵌套的flatMap/流

Xml Reader 将 BMP 外部的字符解析为代理项对,这会导致无效的 xml

在Java中,在Object#equals()调用期间,两个对象是否必须具有相同的hashCode?我们是否需要在 equals() 中比较 hashCode?