Redian新闻
>
leetcode Different Ways to Add Parentheses 怎么做?
avatar
leetcode Different Ways to Add Parentheses 怎么做?# JobHunting - 待字闺中
j*3
1
求代码,求思路,
果然年龄大了,智商捉急啊,还好最近不面
avatar
c*n
2
你想想手做怎么弄, 基本上左括号多于右括号就可再加右括号

【在 j**********3 的大作中提到】
: 求代码,求思路,
: 果然年龄大了,智商捉急啊,还好最近不面

avatar
l*s
3
想象一下用手去挨个提溜中间的操作符,每次提溜出一个二叉树。

【在 j**********3 的大作中提到】
: 求代码,求思路,
: 果然年龄大了,智商捉急啊,还好最近不面

avatar
p*2
4

大牛还在刷呀。

【在 j**********3 的大作中提到】
: 求代码,求思路,
: 果然年龄大了,智商捉急啊,还好最近不面

avatar
j*3
5
我说的是那个新题,不是generate parenth的,我们说的是一个题吗?
如果是,就太好了。。。

【在 c******n 的大作中提到】
: 你想想手做怎么弄, 基本上左括号多于右括号就可再加右括号
avatar
j*3
6
校长给点思路吧

【在 p*****2 的大作中提到】
:
: 大牛还在刷呀。

avatar
j*3
7
大牛,能给段java code吗?

【在 l******s 的大作中提到】
: 想象一下用手去挨个提溜中间的操作符,每次提溜出一个二叉树。
avatar
b*5
8
正解

【在 l******s 的大作中提到】
: 想象一下用手去挨个提溜中间的操作符,每次提溜出一个二叉树。
avatar
j*3
9
能给段code么?

【在 b*****5 的大作中提到】
: 正解
avatar
l*a
14
再给你几道follow up questions
输入很长时怎么提高性能呢?
如何去重呢?
如何不用递归呢?

【在 j**********3 的大作中提到】
: 这个题有点像那个 unique binary search tree, 是不?
avatar
p*2
15

boolean isOp(char c){
return c == '+' || c == '-' || c == '*';
}

int cal(char c, int x, int y){
switch(c) {
case '+':
return x+y;
case '-':
return x-y;
case '*':
return x*y;
default:
return -1;
}
}

List dfs(String input, int s, int e){
List al = new ArrayList<>();
for(int i=s; ichar c = input.charAt(i);
if(isOp(c)){
List left = dfs(input, s, i);
List right = dfs(input, i+1, e);
for(int x: left){
for(int y: right){
al.add(cal(c, x, y));
}
}
}
}
if(al.size()==0){
al.add(Integer.parseInt(input.substring(s,e)));
}
return al;
}

public List diffWaysToCompute(String input) {
return dfs(input, 0, input.length());
}

【在 j**********3 的大作中提到】
: 校长给点思路吧
avatar
l*a
16
怎么解决输入太长,call stack overflow的问题呢?
请校长指点

【在 p*****2 的大作中提到】
:
: boolean isOp(char c){
: return c == '+' || c == '-' || c == '*';
: }
:
: int cal(char c, int x, int y){
: switch(c) {
: case '+':
: return x+y;
: case '-':

avatar
o*y
17
dp?
[在 lolhaha (长期骑驴,一直找马) 的大作中提到:]
:怎么解决输入太长,call stack overflow的问题呢?
:请校长指点
:...........
avatar
r*n
18
Scala code, not tested
object Parenthesis {
def main(args: Array[String]) {
val ret = constructTree("1+3*5")
println("start")
ret.foreach(println)
}
def wrap(c: Char): (Int, Int)=>Int = {
c match {
case '+' => (x, y) => x + y
case '-' => (x, y) => x - y
case '*' => (x, y) => x * y
}
}
def constructTree(input: String): Array[Int] = {
var split = false
var ret = (0 until input.length).flatMap{ idx =>
input(idx) match {
case '+' | '-' | '*' =>
split = true
val (left, right) = (constructTree(input.substring(0, idx)),
constructTree(input.substring(idx + 1, input.length)))
for{
l r } yield wrap(input(idx))(l, r)
case _ =>
Array.empty[Int]
}
}.toArray
if (!split){
ret = Array.fill(1)(input.toInt)
}
ret
}
}
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。