-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擴展和符號鏈接