跳至主要内容

讨论下lc最新的那道hard题吧


http://www.mitbbs.com//article_t/JobHunting/33056247.html

发信人: jingi08 (骑驴中), 信区: JobHunting
标  题: 讨论下lc最新的那道hard题吧
发信站: BBS 未名空间站 (Sat Sep 19 01:33:41 2015, 美东)

题目如下:
Given a string that contains only digits 0-9 and a target value, return all
possibilities to add binary operators (not unary) +, -, or * between the
digits so they evaluate to the target value.

给的几个例子:
"123", 6 -> ["1+2+3", "1*2*3"]
"232", 8 -> ["2*3+2", "2+3*2"]
"105", 5 -> ["1*0+5","10-5"]
"00", 0 -> ["0+0", "0-0", "0*0"]
"3456237490", 9191 -> []


下面是我的java code,有个test case一直超时,求大牛指点优化。我的思路很简单,
先生成所有可能的计算式,然后对每个计算式求值与target比较。

public List<String> addOperators(String num, int target) {
        List<String> result = new ArrayList<String>();
        if(num == null || num.length() == 0) return result;
        List<String> expressions = new ArrayList<String>();
        generate(num, expressions, 0, "");
        for(String str : expressions)
            if(evaluate(str) == target) result.add(str);
        return result;
    }
   
    private void generate(String num, List<String> result, int pos, String
currResult) {
        if(pos == num.length()) {
            result.add(currResult);
            return;
        }
        String currStr = currResult + num.substring(pos, pos+1);
        if(pos == num.length() - 1) {
            generate(num, result, pos+1, currStr);
        } else {
            // apply '+'
            generate(num, result, pos+1, currStr+"+");
            // apply '-'
            generate(num, result, pos+1, currStr+"-");
            // apply '*'
            generate(num, result, pos+1, currStr+"*");
            // no operator, combine digits
            generate(num, result, pos+1, currStr);
        }
    }
   
    private long evaluate(String str) {
        LinkedList<Long> operand = new LinkedList<>();
        LinkedList<Character> operator = new LinkedList<>();
        for(int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == '+' || str.charAt(i) == '-' || str.charAt(i)
== '*') {
                operator.offer(str.charAt(i));
                continue;
            }
            long val = 0;
            while(i < str.length() && str.charAt(i) >= '0' && str.charAt(i)
<= '9') {
                val = val * 10 + str.charAt(i) - '0';
                i++;
            }
            i--;
            operand.offer(val);
            if(operator.size() > 0 && operator.peekLast() == '*') {
                operator.pollLast();
                operand.offer(operand.pollLast() * operand.pollLast());
            }
        }
        // evaluate the remaining part
        while(!operator.isEmpty()) {
            char optor = operator.poll();
            long operand1 = operand.poll();
            long operand2 = operand.poll();
            if(optor == '+') {
                operand.offerFirst(operand1 + operand2);
            } else {
                operand.offerFirst(operand1 - operand2);
            }
        }
        return operand.poll();
    }
--

评论

此博客中的热门博文

记者探访H&M实体店,店员:我们也爱国,希望明天就关门

http://www.mitbbs.com/article_t/ChinaNews/32684337.html 发信人: jiuna (), 信区: ChinaNews 标  题: 记者探访H&M实体店,店员:我们也爱国,希望明天就关门 发信站: BBS 未名空间站 (Thu Mar 25 02:55:55 2021, 美东) 3月25日中午,《环球时报》记者走访了北京市三里屯核心商区,探访新疆棉事件对H&M 及Nike等品牌实体店的影响。记者发现,在整整占据了三层的北京最大的H&M店之一的 店铺内,顾客稀少,门可罗雀,一些路人进店挑选后也选择不购买其产品即离开。 "看到了H&M和Nike的声明之后,近期不会再购买他们的产品了。既然想在中国做生意 ,还侮辱中国人,那中国人肯定不会支持,"一位路人在接受《环球时报》采访时表示 。"抵制他们的产品对我们并不会产生什么影响,因为替代产品有很多。国内很多品牌 都有很好的设计和质量,大多数时间也都在网上逛淘宝,样式和质量都比H&M好很多, "一位姓赵的北京居民表示。 在接受采访时,一些路人表示,除非H&M展现出道歉的诚意,否则将来也不会再选择这 个品牌。 位于上海某繁华商业街的一家HM店,今天门口有保安值守,店员十分警戒,不让记者拍 摄。两名店员对《环球时报》记者表示他们也希望明天就关店,也不希望发生这样的事 情,他们也是爱国的,但他们只是店员,希望得到记者理解。 王先生是一位在上海南京西路附近上班的打工族,由于听到关于HM的消息,他特地在午 休时间来HM店面转转。王先生告诉记者,"作为一家大公司应该吸取经验教训,在中国 做生意,想赚中国人的钱,就更应该尊重中国人民的感情。" 王先生告诉记者,中国老百姓应该拿出一点实际行动,给这些国外公司一些警告以及反 馈信息。王先生说希望这个事件能给更多的类似企业传递更多的信息,中国人民欢迎外 企来做生意,但是前提一定是秉持公平公正的原则,尊重中国人民的感情。 -- ...

陈凯歌最牛的是在有妻子的情况下可以同时处别的女人

http://www.mitbbs.com/article_t/Military/58546735.html 发信人: kevinloop (小旋风), 信区: Military 标  题: 陈凯歌最牛的是在有妻子的情况下可以同时处别的女人 发信站: BBS 未名空间站 (Wed Oct 28 09:27:57 2020, 美东) 陈凯歌有妻子洪晃,但是同时与许晴同居。许晴那时候是新人,进入演艺圈就被有妇之 夫陈凯歌泡上了。许晴21岁开始与陈凯歌同居,据说陈凯歌破了许晴的处。 后来陈凯歌与倪萍同居,陈凯歌的父亲癌症住院,一直都是倪萍照顾直到送终。但是陈 凯歌自己在外面跟陈红打得火热,而且陈红怀了陈凯歌的孩子。 至于嫖娼之类的,对于陈凯歌就跟吃饭喝水一样随便。 陈凯歌牛逼吧。 --

今天来聊聊贪心的蚊子

http://www.mitbbs.com/article_t/Biology/32092153.html 发信人: GKKL (没完没了), 信区: Biology 标  题: 今天来聊聊贪心的蚊子 发信站: BBS 未名空间站 (Tue May 29 21:48:54 2018, 美东) 蚊子作为存在了几亿年的生物,进化已经相当优秀了。 超强的空中停滞倒飞急刹车的飞行能力,灵敏的嗅觉,夜间导航能力,腿部防水水上漂 功效等等。 小小的人类与它们相比,简直不值得一提。 叮咬方面的进化是蚊子这个生物最大的特点。 首先大多数人认识存在一个误区,蚊子咬人会产生疼痛瘙痒。 蚊子的针刺其实是无痛的。 蚊子最厉害的地方就在于,刺破人类的皮肤,而不会被人类察觉,拥有无痛刺入的效果。 蚊子的针刺部位的尖端尺寸进化到微纳米级别。 而目前,就人类拥有的技术而言,还造不出来蚊子的口针。 蚊子口器是刺吸式口器,组成部分为 上唇,上鄂,舌,下鄂,下唇 上唇是针管状的,用于刺破皮肤。 下鄂是喉咽道,在两侧有微纳米级的锯齿。 上唇和下鄂 才是蚊子刺入皮肤的主要部分。 首先用针管状的上唇扎破皮肤,然后下鄂两侧微纳米锯齿产生一定的振动频率,这样的 结构和刺入方式及其省力。使得针管状的上唇能继续深入真皮组织。 下唇并不刺入,而是留在皮肤表面作为支撑点。 蚊子刺入皮肤的的接触面积小,完全不会刺痛人类的疼痛神经。 医学上蚊子叮咬的痛觉是最低级的疼痛级别,称为"痛阈"几乎不会被人类所察觉。 好了,既然蚊子蚊子叮咬不会产生疼痛那人类为什么会产生瘙痒的感觉。 人类产生的瘙痒感,并不是因为蚊子的物理叮咬,或者是蚊子含有抗凝血唾液的化学物 质引起的。 相反,这是因为我们人类本身。 站在人类的角度,蚊子已经这么优秀了,我们人类是不是应该做点什么。 人类的免疫系统,在身体受到伤害时释放的叫做组织胺的蛋白质抵抗外来物质,正是这 些人体自身分泌的物质,造成我们叮咬部位的肿胀,从而产生瘙痒感。 当我们感觉到蚊子叮咬的时候,实际上蚊子早就开始下手了,而我们却没有察觉。 愚蠢的...