逆波兰表达式求值 简化路径 判断一个数字是否可以表示成三的幂的和 有效的括号

150. 逆波兰表达式求值

遇到一个运算符,直接将与之相近的前两个数字按此规则运算。注意数字的前后顺序就是运算的顺序
Deque deque = new ArrayDeque<>();
for(String token : tokens) {
if(dnn(token)) {
deque.addFirst(Integer.parseInt(token));
}else {
int hou = deque.removeFirst();注意前后
int qian = deque.removeFirst();
switch(token) {
case "+" :
deque.addFirst(qian + hou);
break;
case "-" :
deque.addFirst(qian - hou);
break;
case "":
deque.addFirst(qian * hou);
break;
case "/":
deque.addFirst(qian / hou);
break;
default:
}
}
}
return deque.removeFirst();
}
public boolean dnn(String s) {
return !("+".equals(s) || "-".equals(s) || "
".equals(s) || "/".equals(s));
}


71. 简化路径

String[] pre = path.split("/");
Deque deque = new ArrayDeque<>();
for(String s : pre) {
if("..".equals(s)) {需要回退
if(!deque.isEmpty()) {能不能回
deque.removeLast();
}
}
else if(s.length() > 0 && !".".equals(s)) {判断加的是不是空字符
deque.addLast(s);
}
}
StringBuilder ans = new StringBuilder();
if(deque.isEmpty()) {
ans.append('/');
}else {
while(!deque.isEmpty()) {
ans.append('/');
ans.append(deque.removeFirst());
}
}
return ans.toString();


1780. 判断一个数字是否可以表示成三的幂的和

因为3的整数幂之前没有系数
所以转化成的3进制数字,只有0、1
while(n != 0) {
if(n % 3 == 2) {
return false;
}
n /= 3;
}
return true;


20. 有效的括号

int n = s.length();
if(n % 2 == 1) {
return false;
}
Map<Character, Character> map = new HashMap<>(){{
put(')', '(');
put(']', '[');
put('}', '{');
}};
Deque deque = new ArrayDeque<>();
for(int i = 0; i < n; i++) {
char c = s.charAt(i);
if(map.containsKey(c)) {
if(deque.isEmpty() || deque.getFirst() != map.get(c)){最新加入的最靠前
return false;
}else{
deque.removeFirst();
}
}
else {
deque.addFirst(c);
}
}
return deque.isEmpty();

posted on 2022-12-09 17:13  xtdnn  阅读(27)  评论(0)    收藏  举报

导航