题解 | #给表达式添加运算符#

给表达式添加运算符

https://www.nowcoder.com/practice/fdaee292bdaf4a7eb686c8ce72b2f3e1?tpId=117&tqId=39421&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Ftab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D117&difficulty=undefined&judgeStatus=undefined&tags=&title=

import java.util.*;


public class Solution {
    
    public class ComparaInteger implements Comparator<Integer> {
        @Override
        public int compare(Integer num1, Integer num2) {
            return num1 - num2;
        }
    }

    HashSet<ArrayList<Integer>> hashSet = new HashSet<>();
    ArrayList<String> arrayList = new ArrayList<>();

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param num    string字符串
     * @param target int整型
     * @return string字符串一维数组
     */
    public String[] addOpt(String num, int target) {
        // write code here
        ArrayList<Integer> currentNumber = new ArrayList<>();
        splitString(currentNumber, num, 0);
        for (ArrayList<Integer> tmpArr : hashSet) {
            isEqualTarget(new StringBuffer(String.valueOf(tmpArr.get(0))), tmpArr, 1, target, tmpArr.get(0));
        }
        String[] ans = new String[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++) {
            ans[i] = arrayList.get(i);
        }
        return ans;
    }

    public void splitString(ArrayList<Integer> currentNumber, String num, int index) {
        if (index >= num.length()) {
            ArrayList<Integer> copyArr = new ArrayList<>(currentNumber);
            copyArr.sort(new ComparaInteger());
            hashSet.add(copyArr);
            return;
        }
        if (num.charAt(index) == '0') {
            currentNumber.add(Integer.valueOf(0));
            splitString(currentNumber, num, index + 1);
            return;
        }
        for (int splitIndex = index + 1; splitIndex <= num.length(); splitIndex++) {
            currentNumber.add(Integer.valueOf(num.substring(index, splitIndex)));
            splitString(currentNumber, num, splitIndex);
            currentNumber.remove(currentNumber.size() - 1);
        }
    }

    public void isEqualTarget(StringBuffer currentString, ArrayList<Integer> currentNumber, int index, int target, int previousNum) {
        if (index >= currentNumber.size()) {
            if (previousNum == target) {
                arrayList.add(new String(currentString));
            }
            return;
        }
        StringBuffer copySB1 = new StringBuffer(new String(currentString));
        StringBuffer copySB2 = new StringBuffer(new String(currentString));
        // 加
        currentString.append("+" + currentNumber.get(index));
        isEqualTarget(currentString, currentNumber, index + 1, target, previousNum + currentNumber.get(index));
        // 减
        copySB1.append("-" + currentNumber.get(index));
        isEqualTarget(copySB1, currentNumber, index + 1, target, previousNum - currentNumber.get(index));
        // 乘
        copySB2.append("*" + currentNumber.get(index));
        isEqualTarget(copySB2, currentNumber, index + 1, target, previousNum * currentNumber.get(index));
    }
}
全部评论

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
440737次浏览 4493人参与
# 春招别灰心,我们一人来一句鼓励 #
41503次浏览 524人参与
# 北方华创开奖 #
107319次浏览 599人参与
# 地方国企笔面经互助 #
7930次浏览 18人参与
# 同bg的你秋招战况如何? #
75684次浏览 552人参与
# 虾皮求职进展汇总 #
114355次浏览 884人参与
# 阿里云管培生offer #
119907次浏览 2219人参与
# 实习,投递多份简历没人回复怎么办 #
2454094次浏览 34848人参与
# 实习必须要去大厂吗? #
55687次浏览 960人参与
# 提前批简历挂麻了怎么办 #
149836次浏览 1977人参与
# 投递实习岗位前的准备 #
1195731次浏览 18546人参与
# 你投递的公司有几家约面了? #
33181次浏览 188人参与
# 双非本科求职如何逆袭 #
661934次浏览 7394人参与
# 如果公司给你放一天假,你会怎么度过? #
4734次浏览 55人参与
# 机械人春招想让哪家公司来捞你? #
157604次浏览 2267人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11381次浏览 271人参与
# 发工资后,你做的第一件事是什么 #
12431次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35621次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20091次浏览 240人参与
# 我的上岸简历长这样 #
451933次浏览 8088人参与
# 实习想申请秋招offer,能不能argue薪资 #
39241次浏览 314人参与
# 非技术岗是怎么找实习的 #
155852次浏览 2120人参与
牛客网
牛客企业服务