Redian新闻
>
给出5个数字和加减乘除4个符号求最大值
avatar
y*a
2
遍历所有的可能性,计算。
public int maxResult(int[]A) {
int[]rel=new int[1];rel[0]=Integer.MIN_VALUE;
dfs(A, new int[A.length-1], 0, rel);
return rel[0];
}
void dfs(int[]A, int[]op, int i, int[] max) {
if (i==op.length) {
StringBuilder s=new StringBuilder();
s.append(Integer.toString(A[0]));
char[] opc=new char[4];
opc[0]='+';opc[1]='-';opc[2]='*';opc[3]='/';
for (int j=0;js.append(opc[op[j]]);
s.append(A[j+1]);
}
max[0]=Math.max(max[0], eval(s.toString()));
return;
}
for (int j=0;j<4;++j){
op[i]=j;
dfs(A, op, i+1, max);
}
}
int eval(String s) {
List rel=new ArrayList<>();
//0 : operator 1: numbers
for (int i=0, n=s.length();iif (rel.size()==0||rel.get(rel.size()-1).charAt(0)=='0') {
int j=i+1;
while (jrel.add("1,"+s.substring(i,j));
i=j;
} else {
rel.add("0,"+s.substring(i,i+1));
++i;
}
}
return evaluateInorder(rel);
}
int evaluateInorder(List s) {
String[] rp=new String[s.size()];
Queuestc=Collections.asLifoQueue(new ArrayDeque());
int j=0;
for (int i=0;iif (s.get(i).charAt(0)=='0') {
char c=s.get(i).charAt(2);
if (c=='/'||c=='*') {
rp[j++]=s.get(i+1).split(",")[1];
rp[j++]=s.get(i).split(",")[1];
i+=2;
} else stc.offer(s.get(i++).split(",")[1]);
} else rp[j++]=s.get(i++).split(",")[1];
}
while (!stc.isEmpty())rp[j++]=stc.poll();
for (int i=0;iif (rp[i].length()==1&&!Character.isDigit(rp[i].charAt(0))) {
int b=Integer.parseInt(stc.poll());
int a=Integer.parseInt(stc.poll());
char c=rp[i].charAt(0);
if (c=='*') stc.offer(Integer.toString(a*b));
if (c=='/') stc.offer(Integer.toString(a/b));
if (c=='+') stc.offer(Integer.toString(a+b));
if (c=='-') stc.offer(Integer.toString(a-b));
} else stc.offer(rp[i]);
}
return Integer.parseInt(stc.poll());
}
public static void main(String[] args) {
int[] A={1,1,2,2,1};
System.out.println(new MaxNumberWithOperators().maxResult(A));
}
avatar
m*a
3
用递归
第一个是必须是数字,有5种选择,
第二个是+/-/*//之一,选一个
然后是数字,剩下4个数字,选一个
然后是3个符号
...
...
递归完成,最后一个数字,比较这个方法的值是不是最大

【在 c*******r 的大作中提到】
: 用啥算法?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。