前言

本文隶属于专栏《LeetCode 刷题汇总》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构请见LeetCode 刷题汇总

Github 配套工程

algorithm

正文

幕布

幕布链接

131. 分割回文串

Java: Backtracking solution.​

回溯

package com.shockang.study.algorithm.java.leetcode.leetcode101_200.leetcode131.solution1;import java.util.ArrayList;
import java.util.List;/*** 回溯** @author Shockang*/
public class Solution {public List<List<String>> partition(String s) {List<List<String>> res = new ArrayList<>();List<String> list = new ArrayList<>();dfs(s, 0, list, res);return res;}public void dfs(String s, int pos, List<String> list, List<List<String>> res) {if (pos == s.length()) res.add(new ArrayList<>(list));else {for (int i = pos; i < s.length(); i++) {if (isPal(s, pos, i)) {list.add(s.substring(pos, i + 1));dfs(s, i + 1, list, res);list.remove(list.size() - 1);}}}}public boolean isPal(String s, int low, int high) {while (low < high) if (s.charAt(low++) != s.charAt(high--)) return false;return true;}}

132. 分割回文串 II

Java Version, with comments and better naming. Easier to understand​

动态规划

package com.shockang.study.algorithm.java.leetcode.leetcode101_200.leetcode132.solution1;import java.util.stream.IntStream;/*** @author Shockang*/
public class Solution {public int minCut(String s) {// validate inputif (s == null || s.length() <= 1) {return 0;}// dpint N = s.length();int[] dp = IntStream.range(0, N).toArray(); // initial value: dp[i] = ifor (int mid = 1; mid < N; mid++) { // iterate through all chars as mid point of palindrome// CASE 1. odd len: center is at index mid, expand on both sidesfor (int start = mid, end = mid; start >= 0 && end < N && s.charAt(start) == s.charAt(end); start--, end++) {int newCutAtEnd = (start == 0) ? 0 : dp[start - 1] + 1;dp[end] = Math.min(dp[end], newCutAtEnd);}// CASE 2: even len: center is between [mid-1,mid], expand on both sidesfor (int start = mid - 1, end = mid; start >= 0 && end < N && s.charAt(start) == s.charAt(end); start--, end++) {int newCutAtEnd = (start == 0) ? 0 : dp[start - 1] + 1;dp[end] = Math.min(dp[end], newCutAtEnd);}}return dp[N - 1];}
}

133. 克隆图

官方题解

Map+DFS

package com.shockang.study.algorithm.java.leetcode.leetcode101_200.leetcode133.solution1;import com.shockang.study.algorithm.java.leetcode.common.graph.Node;import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;/*** @author Shockang*/
public class Solution {private Map<Integer, Node> map = new HashMap<>();public Node cloneGraph(Node node) {if (node == null)return null;if (map.containsKey(node.val))return map.get(node.val);Node res = new Node(node.val);map.put(res.val, res);res.neighbors.addAll(node.neighbors.stream().map(this::cloneGraph).collect(Collectors.toList()));return res;}
}

HashMap,LinkedList,BFS

package com.shockang.study.algorithm.java.leetcode.leetcode101_200.leetcode133.solution2;import com.shockang.study.algorithm.java.leetcode.common.graph.Node;import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;/*** @author Shockang*/
public class Solution {public Node cloneGraph(Node node) {if (node == null) {return node;}HashMap<Node, Node> visited = new HashMap<>();// 将题目给定的节点添加到队列LinkedList<Node> queue = new LinkedList<>();queue.add(node);// 克隆第一个节点并存储到哈希表中visited.put(node, new Node(node.val, new ArrayList()));// 广度优先搜索while (!queue.isEmpty()) {// 取出队列的头节点Node n = queue.remove();// 遍历该节点的邻居for (Node neighbor : n.neighbors) {if (!visited.containsKey(neighbor)) {// 如果没有被访问过,就克隆并存储在哈希表中visited.put(neighbor, new Node(neighbor.val, new ArrayList()));// 将邻居节点加入队列中queue.add(neighbor);}// 更新当前节点的邻居列表visited.get(n).neighbors.add(visited.get(neighbor));}}return visited.get(node);}
}

134. 加油站

Share some of my ideas.​

sumGas,sumCost,start,tank

package com.shockang.study.algorithm.java.leetcode.leetcode101_200.leetcode134.solution1;/*** @author Shockang*/
public class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int sumGas = 0;int sumCost = 0;int start = 0;int tank = 0;for (int i = 0; i < gas.length; i++) {sumGas += gas[i];sumCost += cost[i];tank += gas[i] - cost[i];if (tank < 0) {start = i + 1;tank = 0;}}if (sumGas < sumCost) {return -1;} else {return start;}}
}

135. 分发糖果

A simple solution​

动态规划,初始都为 1,左一遍,右一遍

package com.shockang.study.algorithm.java.leetcode.leetcode101_200.leetcode135.solution1;import java.util.Arrays;/*** 动态规划,初始都为 1,左一遍,右一遍** @author Shockang*/
public class Solution {public int candy(int[] ratings) {int n = ratings.length;int[] candies = new int[n];Arrays.fill(candies, 1);for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i - 1]) {candies[i] = candies[i - 1] + 1;}}int sum = candies[n - 1];for (int i = n - 2; i >= 0; i--) {if (ratings[i] > ratings[i + 1]) {candies[i] = Math.max(candies[i], candies[i + 1] + 1);}sum += candies[i];}return sum;}
}

LeetCode 131~135相关推荐

  1. 【回文串4 DFS】LeetCode 131. Palindrome Partitioning

    LeetCode 131. Palindrome Partitioning DFS的经典套路题目!!! 八皇后问题写法类似!!! Solution1: 转载网址:http://www.cnblogs. ...

  2. Java描述 LeetCode,135. Candy 分发糖果

    大家好,我是河海哥,专注于后端,如果可以的话,想做一名code designer而不是普通的coder,一起见证河海哥的成长,您的评论与赞是我的最大动力,如有错误还请不吝赐教,万分感谢.一起支持原创吧 ...

  3. [Lintcode]136. Palindrome Partitioning /[Leetcode]131. Palindrome Partitioning

    136. Palindrome Partitioning / 131. Palindrome Partitioning 本题难度: Medium Topic: Search DFS Descripti ...

  4. leetcode 131. Palindrome Partitioning | 131. 分割回文串(递归解法)

    题目 https://leetcode.com/problems/palindrome-partitioning/ 题解 中规中矩的递归,因为每一层都需要在上一层保存好的 list 的基础上继续,而且 ...

  5. LeetCode 131. 分割回文串(回溯)

    文章目录 1. 题目 2. 回溯 1. 题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: ...

  6. LeetCode 131. 分割回文串【字符串,回溯算法】

    131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = &q ...

  7. leetcode 131. Palindrome Partitioning

    简单的思路: 深度优先搜索: class Solution { public:bool isPalin(string str){int n=str.length();int i=0;int j=n-1 ...

  8. leetcode 131. 分割回文串 思考分析

    题目 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 思考 问题可以分为两个子问题:1.判断回文串2.分割数组 判断回文串 bool isPalin ...

  9. leetcode 131. 分割回文串(dp+回溯)

    给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案. 回文串 是正着读和反着读都一样的字符串. 示例 1: 输入:s = "aab&quo ...

最新文章

  1. Keras之MLP:利用MLP【Input(8)→(12)(relu)→O(sigmoid+二元交叉)】模型实现预测新数据(利用糖尿病数据集的八个特征实现二分类预测
  2. Pytorch中的variable, tensor与numpy相互转化
  3. Mybatis中mapper文件中的两层循环
  4. 安装与配置-以前的某个程序安装已在安装计算机上创建挂起的文件操作......
  5. matlab wc wp,数字信号处理MATLAB习题.PDF
  6. 超详细:Springboot连接centos7下redis6的必要配置和失败分析
  7. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)
  8. html一级子元素,获取子元素_html/css_WEB-ITnose
  9. 书籍推荐《区块链技术指南》
  10. Java代码验证社会统一信用代码规则
  11. 2022-渗透测试-6个最常用的工具
  12. java rsa x509_Java使用RSA加密解密签名及校验
  13. jsp左侧菜单栏_HTML页面左侧菜单栏切换实现右侧主体内容改变
  14. tensorflow object detection api关于csv转换tfrecord格式
  15. OpenMV的资料下载
  16. javaCSGO赛事管理系统springbootvueweb
  17. 华为mate30pro和荣耀v30pro的区别 哪个好
  18. 梯度下降算法笔记整理6 - 梯度下降 偏导数及其几何意义
  19. 【linux systemctl】Linux命令之systemctl命令
  20. anaconda虚拟环境安装cvxpy报错

热门文章

  1. 7.1 python 自定义函数的创建及调用
  2. 关于uniapp 打包小程序包过大问题
  3. 验证的管理篇之二:验证管理的三要素
  4. ubantu怎么配置静态ip
  5. 8分钟答辩稿_8分钟的发言稿多少字
  6. 单相与三相dq变换的对比分析(谐波的dq变换)
  7. 三维电子沙盘 三维数字虚拟沙盘 开发教程第39课 交互触摸查询面板的调用
  8. Linux--火墙管理
  9. 计算机组装选什么比较好,组装电脑各个硬件什么牌子好 DIY电脑配件品牌选购建议...
  10. JS前端加密和Java后端的AES加密和解密