b站的笔试题好简单
感觉从实习到现在,是遇见的最简单的一次了,都是 lc 原题
唉 不过没啥用 不是西安的公司- -
第一题太菜 还是忘了咋做 直接return true,对了57%
LC672 正确答案
class Solution {
public boolean judgePoint24(int[] nums) {
List<Double> list = new ArrayList<>();
for (int num : nums) {
list.add((double) num);
}
return backtrack(list);
}
private boolean backtrack(List<Double> list) {
// 只剩下一个数字的时候,判断它是不是 24,因为是浮点数,比较差的绝对值是否小于 0.000001
if (list.size() == 1) {
return Math.abs(list.get(0) - 24) < 1e-6;
}
// 不止一个数字时,任意取两个数字 a、b
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
// 必须是两个不同的数字,因此索引不等
if (i != j) {
double a = list.get(i);
double b = list.get(j);
// nums 存储新的组合
List<Double> nums = new ArrayList<>();
// 如果还有其它不等于当前两个所选数字的数字,添加进去
for (int k = 0; k < list.size(); k++) {
if (k != i && k != j) {
nums.add(list.get(k));
}
}
// 计算当前选的两个不同数字的所有组合
for (int k = 0; k < 4; k++) {
if (k < 2 && j > i) continue;
if (k == 0) nums.add(a + b);
else if (k == 1) nums.add(a * b);
else if (k == 2) nums.add(a - b);
else {
if (b != 0) {
nums.add(a / b);
} else {
continue;
}
}
if (backtrack(nums)) return true;
nums.remove(nums.size() - 1);
}
}
}
}
return false;
}
}第二题很简单 LC20
public boolean IsValidExp(String s) {
if (s.equals("") || s.length() == 0) {
return true;
}
HashMap<Character, Character> map = new HashMap<>();
map.put('}', '{');
map.put(']', '[');
map.put(')', '(');
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
// 是右括号
if (map.containsKey(c)) {
if (stack.isEmpty() || map.get(c) != stack.pop()) {
return false;
}
} else {// 是左括号
stack.push(c);
}
}
return stack.isEmpty();
}第三题更简单 找钱的 忘了哪题
public int GetCoinCount(int N) {
N = 1024 - N;
int count = 0;
while (N > 0) {
if (N >= 64) {
N -= 64;
} else if (N >= 16) {
N -= 16;
} else if (N >= 4) {
N -= 4;
} else {
N--;
}
count++;
}
return count;
}#哔哩哔哩##笔试题目#