JAVA, 역폴란드 전환
14531 단어 java 구현
자바로 역폴란드 전환을 실현한 후에 역폴란드 전환의 절차가 더욱 기억에 남는 것 같아요. 괜찮아요.
아래 위 코드
1 package com.hicc.lc;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Stack;
8
9 import com.hicc.lc.vo.Result;
10
11 public class Generator {
12 //
13 public static int getPriority(String operator) {
14 final int plusPriority = 2;
15 final int multiplyPriority = 3;
16 final int minusPriority = 4;
17 final int leftBracketPriority = 1;
18 if ("+".equals(operator))
19 return plusPriority;
20 if ("*".equals(operator))
21 return multiplyPriority;
22 if ("-".equals(operator))
23 return minusPriority;
24 if ("(".equals(operator))
25 return leftBracketPriority;
26 return 0;
27 }
28
29 //
30 public static boolean priorThan(String operatorA, String operatorB) {
31 return getPriority(operatorA) > getPriority(operatorB);
32 }
33
34 public static void main(String args[]) {
35 String expression = "(a+b+c)*d*-e+f*g";
36 // String expression = "(A+B)*(C+D)+E";
37 Map<Integer, String> retrivalWords = new HashMap<Integer, String>();//
38 Stack<String> operatorList = new Stack<String>();//
39 List<Result> result = new ArrayList<Result>();//
40 expression = expression.concat(".");
41 int letterNum = 0;
42 for (int i = 0; i < expression.length(); i++) {
43 String s = String.valueOf(expression.charAt(i));
44 if (s.matches("[a-zA-Z]")) {
45 letterNum = letterNum + 1;
46 } else {
47 if (letterNum > 0) {
48 String retrivalWord = expression
49 .substring(i - letterNum, i);
50 retrivalWords.put(retrivalWords.size() + 1, retrivalWord);
51 result.add(new Result(0, retrivalWord));
52 letterNum = 0;
53 }
54 if ("(".equals(s)) {
55 operatorList.push("(");
56 }
57 if ("+*-".contains(s)) {
58 while ((!operatorList.isEmpty())
59 && (!priorThan(s, operatorList.peek()))) {
60 result.add(new Result(1, operatorList.pop()));
61 }
62 // if((!operatorList.isEmpty())
63 // && !s.equals(operatorList.peek()))
64 operatorList.push(s);
65 }
66 if (")".equals(s)) {
67 while (!operatorList.peek().equals("(")) {
68 result.add(new Result(1, operatorList.pop()));
69 }
70 operatorList.pop();
71 }
72 if (".".equals(s)) {
73 while (!operatorList.isEmpty()) {
74 result.add(new Result(1, operatorList.pop()));
75 }
76 result.add(new Result(1, "."));
77 }
78
79 }
80 }
81 System.out.print(" :");
82 for (int j = 0; j < result.size(); j++) {
83 System.out.print(result.get(j).getContent());
84 }
85 System.out.println();
86 }
87 }
package com.hicc.lc.vo;
public class Result {
private int charactor;
private String content;
public Result(int charactor, String content) {
this.charactor = charactor;
this.content = content;
}
public int getCharactor() {
return charactor;
}
public String getContent() {
return content;
}
public void setCharactor(int charactor) {
this.charactor = charactor;
}
public void setContent(String content) {
this.content = content;
}
}
오랫동안 프로그래밍을 하지 않아서 각종 데이터 구조가 헷갈렸습니다. 만약 위의 코드가 개선해야 할 부분이 있다고 생각하는 사람이 있다면 바로잡아 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA는 두 갈래 나무의 전, 중, 후 순서를 반복한다(귀속과 비귀속)최근 면접에서 두 갈래 나무 뒤에 비귀속 실현 방법을 물어본 적이 있는데, 귀속 해결이 될 줄 알았으면 OK인 줄 알았는데 너무 요행을 바라는 것 같아서 다음 면접을 앞두고 이 문제를 정리해 봤다. 우선 두 갈래 트...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.