-3
A
回答
0
在短时间内没有找到办法做到这一点(而且没有在一段时间内完成一个有趣的算法)我决定使用栈实现,因为它实际上比数学操作栈复杂。
在堆栈中往回走,你只需要知道几件事情,因为这基本上是解析数学语句的通用解决方案的修改实现。
1)你的整数后缀可建的多个字符
2)你的整数后缀可以是一个倍增器(下一个字符是一个“)”)
3)你需要处理隐含的“1”
该实现将字符从一个堆栈中弹出,并只将字母和数字压入“返回堆栈”。
String expandFormula(String s){
Stack<Character> stack = new Stack();
Stack<Character> hanoi = new Stack();
char[] ca = s.toCharArray();
Character c;
List<Integer> multipliers = new ArrayList();
String multiBuff;
int val;
boolean flag;
for (int i = 0; i < ca.length; i++)
stack.push(ca[i]);
while(!stack.isEmpty()){
c = stack.pop();
if (Character.isLetter(c)){
try{
//previous parse was end of Symbol, implicit "1"
flag = Character.isUpperCase(hanoi.peek());
}
catch(EmptyStackException ese){ //change exception
flag = false;
}
//push implicit 1
if (flag){
stack.push(c);
stack.push('1');
}
//continue as usual
else
hanoi.push(c);
}
//begin number parsing
else if(Character.isDigit(c)){
flag = false;
multiBuff = c +"";
//parse the integer out
while(Character.isDigit(stack.peek())){
c = stack.pop();
multiBuff = c + multiBuff;
}
//if next char is), then value is a suffix
if (stack.peek() == ')'){
flag = true;
stack.pop();
multipliers.add(Integer.parseInt(multiBuff));
//pop successive)s
while(stack.peek() == ')'){
stack.pop();
multipliers.add(1);
}
}
if(Character.isLetter(stack.peek())){
val = flag ? 0 : Integer.parseInt(multiBuff);
//get full value of
for(Integer i : multipliers){
if (val == 0)
val = i;
else
val *= i;
}
//trim and push first decibit
while(val > 0){
hanoi.push(Character.forDigit(val % 10, 10));
val /= 10;
}
}
}
//end of nest, remove most recent multiplier
else if(c == '(')
try{
multipliers.remove(multipliers.size()-1);
}
catch(ArrayIndexOutOfBoundsException aioobe){
}
}
multiBuff = "";
while(!hanoi.isEmpty())
multiBuff += hanoi.pop();
return multibuff;
}
该溶液可以通过直接转换到您的输出字符串:
1)改变 “河内” 串
2)改变 “hanoi.push(C)”,以河内= C +河内
3)改变 “hanoi.peek()” 到 “hanoi.charAt(0)”
4)变更例外必要(或使用一般例外反正)
5)而就在返回河内,而不是multibuff事底部。
相关问题
- 1. MMX符号扩展
- 2. C++符号扩展
- 3. 如何通过冒号分割冒号分隔的glob模式时防止扩展模式扩展?
- 4. Java扩展字符串分割正则表达式括号
- 5. 理解符号扩展
- 6. 符号扩展到16位
- 7. 与扩展成分发生化学反应路由器
- 8. Swift中的类扩展与子类化?
- 9. 使用无符号long long的符号扩展
- 10. 使用符号链接来更改字幕的扩展格式
- 11. 正则表达式的扩展分裂,但保留扩展
- 12. 的Javascript转化数学符号为MATHML符号
- 13. 逗号扩展
- 14. matlab中的符号数学公式
- 15. 如何扩展相对路径而不扩展符号链接?
- 16. Clojure的反引号扩展
- 17. 学说:扩展实体类
- 18. Doctrine2 loading学习扩展
- 19. CKEditor的符号和编号格式化
- 20. 边缘扩展符号失败
- 21. verilog算术(符号扩展)编辑
- 22. 符号在C中扩展int int
- 23. SymPy Taylor扩展功能符号
- 24. Markdown toc扩展更改`paragraph`¶符号
- 25. 两个补码符号扩展python?
- 26. pwd从python扩展符号链接
- 27. 在扩展类中找不到符号
- 28. Awk,gsub,&符号和意外扩展
- 29. C如何处理符号扩展?
- 30. TYPO3扩展和符号链接