美文网首页
2020-04-12 241. Different Ways t

2020-04-12 241. Different Ways t

作者: _伦_ | 来源:发表于2020-04-12 15:52 被阅读0次

    这个题目,一开始想的思路是 a ? b ? c ? d ? e ... 分解为 (a ? b) ? c ? d ? e ... 和 a ? (b ? c ? d ? e ...) 但是按照这个思路代码写不出来。看了一眼别人的代码,原来是按照每个运算符的位置,把问题分成两个子问题,然后递归求解。代码很简单,看一眼就知道怎么写的那种。但是感觉如果没有做过的话,很难一开始就想到这个方法。最后是分治+缓存解决。

    class Solution {

        public List<Integer> diffWaysToCompute(String input) {

            return ways(input, new HashMap<>());

        }

        List<Integer> ways(String input, Map<String, List<Integer>> cache) {

            {

                List<Integer> cachedRes = cache.get(input);

                if (cachedRes != null) return cachedRes;

            }

            List<Integer> res = new LinkedList<>();

            for (int i = 0; i < input.length(); i++) {

                char c = input.charAt(i);

                if ("+-*".indexOf(c) != -1) {

                    List<Integer> lefts = ways(input.substring(0, i), cache);

                    List<Integer> rights = ways(input.substring(i + 1), cache);

                    for (Integer left : lefts) {

                        for (Integer right : rights) {

                            if (c == '+') {

                                res.add(left + right);

                            } else if (c == '-') {

                                res.add(left - right);

                            } else if (c == '*') {

                                res.add(left * right);

                            }

                        }

                    }

                }

            }

            if (res.isEmpty()) {

                res.add(Integer.parseInt(input));

            }

            cache.put(input, res);

            return res;

        }

    }

    相关文章

      网友评论

          本文标题:2020-04-12 241. Different Ways t

          本文链接:https://www.haomeiwen.com/subject/gtfbmhtx.html