当前位置: 首页 > news >正文

每日5题Day19 - LeetCode 91 - 95

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!

第一题:91. 解码方法 - 力扣(LeetCode)

class Solution {public int numDecodings(String s) {int n = s.length();//注意我们dp的范围是n+1int[] dp = new int[n + 1];//初始条件,为什么是dp[0] = 1,因为我们转移方程中dp[i]与dp[i-1]有关dp[0] = 1;for (int i = 1; i <= n; ++i) {//如果是0就不管了if (s.charAt(i - 1) != '0') {dp[i] += dp[i - 1];}//看连续两位组成的数是否在[0,25]中if (i > 1 && s.charAt(i - 2) != '0' && ((s.charAt(i - 2) - '0') * 10 + (s.charAt(i - 1) - '0') <= 26)) {dp[i] += dp[i - 2];}}return dp[n];}
}

第二题:92. 反转链表 II - 力扣(LeetCode)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummy = new ListNode(-1, head);ListNode l = dummy, r = dummy;int ll = left, rr = right;while(ll - 1 > 0){l = l.next;ll--;}//找到第left - 1个位置ListNode cur = l.next;//找到第right + 1个位置while(rr + 1 > 0){r = r.next;rr--;}ListNode tmp = cur;for(int i = 0; i < right - left; i++){tmp = tmp.next;}//反转,先把要反转的部分的尾部指向nulltmp.next = null;ListNode end = cur, pre = null;while(cur != null){ListNode nxt = cur.next;cur.next = pre;pre = cur;cur = nxt;}l.next = pre;end.next = r;return dummy.next;}
}

第三题:93. 复原 IP 地址 - 力扣(LeetCode)

class Solution {List<String> res = new ArrayList<>();List<String> path = new LinkedList<>();public List<String> restoreIpAddresses(String s) {traversal(0, s);return res;}private void traversal(int start, String s){//刚好到最后一位了,有四个部分的ipif(path.size() == 4 && start == s.length()){StringBuilder sb = new StringBuilder();for(int i = 0; i < 3; i++){sb.append(path.get(i)).append('.');}sb.append(path.get(3));res.add(new String(sb));return;}//注意判断条件,对于当前位置,每次都是之后的0至2位组合能不能满足条件for(int i = 1;  i <= 3 && start + i <= s.length(); i++){//注意substring是左开右闭String part = s.substring(start, start + i);if(isValid(part)){path.add(part);traversal(start + i, s);path.remove(path.size() - 1);}}}//判断是否满足,方法类型是booleanprivate boolean isValid(String s){if(s.length() > 1 && s.charAt(0) == '0'){return false;}int num = Integer.parseInt(s);return num >= 0 && num < 256;}
}

第四题:94. 二叉树的中序遍历 - 力扣(LeetCode)

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<Integer> res = new LinkedList<>();public List<Integer> inorderTraversal(TreeNode root) {//注意返回类型if(root == null){return new ArrayList<>();}//先左边inorderTraversal(root.left);//左边都结束了,把中间值放进去res.add(root.val);//走右边inorderTraversal(root.right);//三个方向都做过了,所以我们返回结果return res;}
}

 第五题:95. 不同的二叉搜索树 II - 力扣(LeetCode)

class Solution {public List<TreeNode> generateTrees(int n) {if (n == 0) {return new ArrayList<>();}return generateTrees(1, n);}private List<TreeNode> generateTrees(int start, int end) {List<TreeNode> trees = new ArrayList<>();if (start > end) {trees.add(null);return trees;}for (int i = start; i <= end; i++) {List<TreeNode> leftSubtrees = generateTrees(start, i - 1);List<TreeNode> rightSubtrees = generateTrees(i + 1, end);for (TreeNode left : leftSubtrees) {for (TreeNode right : rightSubtrees) {TreeNode root = new TreeNode(i);root.left = left;root.right = right;trees.add(root);}}}return trees;}
}

http://www.lryc.cn/news/368082.html

相关文章:

  • wordpress里面嵌入哔哩哔哩视频的方法
  • Linux系统管理磁盘管理004
  • Flink窗口理论到实践
  • 279 基于matlab的粒子群集法对铁路电能质量控制系统的容量避行优化设计
  • 46-3 护网溯源 - 溯源报告编写
  • 微服务之基本介绍
  • 嘉立创面板制作不规则图案技巧
  • 如何使用Python中的collections模块提供的数据结构,如deque、Counter、OrderedDict等
  • 2024年道路安全员考试题库
  • 自建 Docker 镜像
  • php实现抖音小程序支付
  • 代码审计(1):CVE-2022-4957分析及复现
  • 问题:设备管理指标为完好率不低于( ),待修率不高于5%,事故率不高于1%。 #知识分享#经验分享#经验分享
  • 【Linux】(六)—— vim编辑器
  • 06016传感器原理与应用202207
  • java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程
  • 二叉树的后序遍历-力扣
  • C++基础编程100题-008 OpenJudge-1.3-06 甲流疫情死亡率
  • 计算机网络 ——网络层(IPv4地址)
  • 重写mybatisPlus自定义ID生成策略
  • 华为坤灵路由器配置SSH
  • 盘点一个Python网络爬虫的实战问题
  • 100道面试必会算法-32-二叉树右视图用栈实现队列
  • ⽀付逻辑漏洞思路⼩集合
  • 嵌入式学习——Linux高级编程复习(线程)——day40
  • kvm管理工具-virsh
  • VisionPro的应用和入门教程
  • 整数规划问题算法例子
  • C#启动一个cmd.exe多次随时输入命令并获取输出
  • 持续总结中!2024年面试必问 20 道分布式、微服务面试题(五)