感觉从实习到现在,是遇见的最简单的一次了,都是 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; }
全部评论
(21) 回帖