码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【剑指offer系列】17-19


    一、剑指 Offer 17. 打印从1到最大的n位数

    题目链接:力扣

    题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

    示例 1:

    1. 输入: n = 1
    2. 输出: [1,2,3,4,5,6,7,8,9]

    题目解析:这道题很简单,求出10的n次方,然后遍历存到数组中就行了。

    解题代码:

    1. class Solution {
    2. public:
    3.     vector<int> printNumbers(int n) {
    4.         vector<int> res;
    5.         for(int i=1;i<pow(10,n);i++){
    6.             res.push_back(i);
    7.         }
    8.         return res;
    9.     }
    10. };

    二、剑指 Offer 18. 删除链表的节点

    题目链接:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。

    示例 1:

    1. 输入: head = [4,5,1,9], val = 5
    2. 输出: [4,1,9]
    3. 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

    解题思路:线性扫描,直到扫描到val,删除掉该节点,要注意首元素的val等于val的情况

    时间复杂度:O(n)

    解题代码:

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode(int x) : val(x), next(NULL) {}
    7. * };
    8. */
    9. class Solution {
    10. public:
    11. ListNode* deleteNode(ListNode* head, int val) {
    12. ListNode* p = head;
    13. if(head->val == val) return head->next;
    14. while(p->next&&p->next->val!=val) p = p->next;
    15. p->next = p->next->next;
    16. return head;
    17. }
    18. };

    三、剑指 Offer 19. 正则表达式匹配

    题目链接:力扣

    题目描述:请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。

    解题思路:动态规划

    状态表示:f[i][j]表示p从j开始到结尾,是否能匹配s从i开始到结尾
    状态转移:

    1. 如果p[j+1]不是通配符'*',则f[i][j]是真,当且仅当s[i]可以和p[j]匹配,且f[i+1][j+1]是真;
    2. 如果p[j+1]是通配符'*',则下面的情况只要有一种满足,f[i][j]就是真;
    • f[i][j+2]是真;
    • s[i]可以和p[j]匹配,且f[i+1][j]是真;

    解题代码:

    1. class Solution {
    2. public:
    3. vectorint>>f;
    4. int n, m;
    5. bool isMatch(string s, string p) {
    6. n = s.size();
    7. m = p.size();
    8. f = vectorint>>(n + 1, vector<int>(m + 1, -1));
    9. return dp(0, 0, s, p);
    10. }
    11. bool dp(int x, int y, string &s, string &p)
    12. {
    13. if (f[x][y] != -1) return f[x][y];
    14. if (y == m)
    15. return f[x][y] = x == n;
    16. bool first_match = x < n && (s[x] == p[y] || p[y] == '.');
    17. bool ans;
    18. if (y + 1 < m && p[y + 1] == '*')
    19. {
    20. ans = dp(x, y + 2, s, p) || first_match && dp(x + 1, y, s, p);
    21. }
    22. else
    23. ans = first_match && dp(x + 1, y + 1, s, p);
    24. return f[x][y] = ans;
    25. }
    26. };

  • 相关阅读:
    Pinely Round 1 (Div. 1 + Div. 2) E - Make It Connected思维&&分类讨论
    【故障公告】k8s 开船记:增加控制舱(control-plane)造成的翻船
    Appium自动化测试基础 — APPium基本原理
    从libc-2.27.so[7fd68b298000+1e7000]崩溃回溯程序段错误segfault
    JS教程之Electron.js设计强大的多平台桌面应用程序的好工具
    Lua01 基本语法+数据类型+流程控制+运算符
    python---设计模式(单例模式和工厂模式)
    Java摆烂基础学习二~运算符
    SOEM 源码解析 ecx_config_find_mappings
    研究生选控制嵌入式还是机器视觉好?
  • 原文地址:https://blog.csdn.net/weixin_52967653/article/details/127678002
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号