移掉 K 位数字 验证二叉树的前序序列化 字符串转化后的各位数字之和
402. 移掉 K 位数字
把新的数字从队尾加入,如果它小于队尾元素,直接把队尾元素出掉,知道不大于为止
Deque
for(int i = 0; i < num.length(); i++) {
char dig = num.charAt(i);
while(!deque.isEmpty() && deque.peekLast() > dig && k > 0) {
deque.removeLast();
k--;注意拿完
}
deque.addLast(dig);
}
for(int i = 0; i < k; i++) {没拿完继续再拿
deque.removeLast();
}
StringBuilder ans = new StringBuilder();
boolean flsg = true;
while(!deque.isEmpty()) {
char t = deque.removeFirst();注意,因为下方判断会再出掉一个
if(flsg && t == '0') continue;防止前导零
flsg = false;
ans.append(t);
}
return ans.length() == 0 ? "0" : ans.toString();
331. 验证二叉树的前序序列化
槽位。如果符合前序,则一定只会化为一个'#'
int n = preorder.length();
int count = 0;
for(int i = n - 1; i >= 0; i--) {
if(preorder.charAt(i) == ',') continue;
if(preorder.charAt(i) == '#') count++;
else {
while(i >= 0 && preorder.charAt(i) != ',') i--;是数字
if(count >= 2) count = count - 2 + 1;
else return false;
}
}
if(count != 1) return false;
return true;
1945. 字符串转化后的各位数字之和
int n = s.length(), ans = 0;
for(int i = 0; i < n; i++) {
int num = s.charAt(i) - 'a' + 1;
while(num != 0) {因为可能是一个二位数的字符,得把它拆开来
ans += num % 10;
num = num / 10;
}
}
for(int i = 0; i < k - 1; i++) {
int t = ans;
ans = 0;
while(t != 0) {
ans += t % 10;
t = t / 10;
}
}
return ans;
浙公网安备 33010602011771号