LC 121. 买卖股票的最佳时机
LC 122. 买卖股票的最佳时机 II
LC 123. 买卖股票的最佳时机 III
LC 131. 分割回文串
class Solution {List<List<String>> results = new ArrayList<>();List<String> result = new ArrayList<>();String s;public List<List<String>> partition(String s) {this.s = s;backtracking(0);return results;}public void backtracking(int startIndex) {if (startIndex == s.length()) {results.add(new ArrayList<>(result));return;}for (int i = startIndex; i < s.length(); i++) {if (judge(s, startIndex, i)) {result.add(s.substring(startIndex, i + 1));} else {continue;}backtracking(i + 1);result.remove(result.size() - 1);}}public boolean judge(String s, int l, int r) {boolean empty = s.isEmpty();if (empty == true) {return true;}while (l <= r) {if (s.charAt(l) != s.charAt(r)) {return false;}l++;r--;}return true;}}
LC 135. 分发糖果
回溯 + 备忘录的话,严重超内存
class Solution {int[] ratings;int minSum = Integer.MAX_VALUE;public int candy(int[] ratings) {this.ratings = ratings;backTracking(-1, 0, 0);return minSum;}// num 表示下标为 index 的孩子的糖果数量// sum 表示下标为 index 及之前的孩子的糖果总数量public void backTracking(int index, int num, int sum) {if (index == ratings.length - 1) {if (sum < minSum) {minSum = sum;}return;}for (int i = 1; i <= ratings.length; i++) {if (index >= 0) {int temp = ratings[index + 1] - ratings[index];if (temp > 0 && i <= num) {i = num + 1;} else if (temp < 0 && i >= num) {break;}}backTracking(index + 1, i, sum + i);}}}
