Python每日一练(20230310)

news2024/9/22 15:32:05

目录

1. 爬楼梯  ★

2. 删除无效的括号  ★★★

3. 给表达式添加运算符   ★★★

🌟 每日一练刷题专栏

C/C++ 每日一练 ​专栏

Python 每日一练 专栏


1. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶

示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

代码:

class Solution(object):
    def climbStairs(self, n):
        if n <= 1:
            return 1
        dp = [1] * 2
        for i in range(2, n + 1):
            dp[1], dp[0] = dp[1] + dp[0], dp[1]
        return dp[1]
# %%
s = Solution()
print(s.climbStairs(2))
print(s.climbStairs(3))
print(s.climbStairs(7))

输出:

2
3
21

注:本题实质就是斐波那契数列。


2. 删除无效的括号

给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。

返回所有可能的结果。答案可以按 任意顺序 返回。

示例 1:

输入:s = "()())()"
输出:["(())()","()()()"]

示例 2:

输入:s = "(a)())()"
输出:["(a())()","(a)()()"]

示例 3:

输入:s = ")("
输出:[""]

提示:

  • 1 <= s.length <= 25
  • s 由小写英文字母以及括号 '(' 和 ')' 组成
  • s 中至多含 20 个括号

代码:

class Solution:
    def removeInvalidParentheses(self, s: str) -> list:
        left, right = 0, 0
        for c in s:
            if c == "(":
                left += 1
            elif c == ")":
                if left == 0:
                    right += 1
                else:
                    left -= 1
            else:
                pass
        def is_valid(s):
            level = 0
            for c in s:
                if c == "(":
                    level += 1
                elif c == ")":
                    if level == 0:
                        return False
                    else:
                        level -= 1
                else:
                    pass
            return level == 0
        def dfs(s, index, left, right, res):
            """
            from index to find ( or ),
            left and right means how many ( and ) to remove
            """
            if (left == 0) and (right == 0) and is_valid(s):
                res.append(s)
                return
            for i in range(index, len(s)):
                c = s[i]
                if c in ["(", ")"]:
                    if (i > 0) and (c == s[i - 1]):
                        continue
                    if (c == ")") and (right > 0):
                        dfs(s[:i] + s[i + 1 :], i, left, right - 1, res)
                    elif (c == "(") and (left > 0):
                        dfs(s[:i] + s[i + 1 :], i, left - 1, right, res)
                    else:
                        pass
        res = []
        dfs(s, 0, left, right, res)
        return list(set(res))

if __name__ == '__main__':
	s = Solution()

	print(s.removeInvalidParentheses(s = "()())()"))
	print(s.removeInvalidParentheses(s = "(a)())()"))
	print(s.removeInvalidParentheses(s = ")("))

输出:

['()()()', '(())()']
['(a)()()', '(a())()']
['']


3. 给表达式添加运算符

给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+- 或 * ,返回所有能够得到目标值的表达式。

示例 1:

输入: num = "123", target = 6
输出: ["1+2+3", "1*2*3"] 

示例 2:

输入: num = "232", target = 8
输出: ["2*3+2", "2+3*2"]

示例 3:

输入: num = "105", target = 5
输出: ["1*0+5","10-5"]

示例 4:

输入: num = "00", target = 0
输出: ["0+0", "0-0", "0*0"]

示例 5:

输入: num = "3456237490", target = 9191
输出: []

提示:

  • 1 <= num.length <= 10
  • num 仅含数字
  • -2^31 <= target <= 2^31 - 1

代码:

class Solution:
    def __init__(self):
        self.size = 0
        self.num = []
        self.now = []
        self.sign = []
    def addOperators(self, num: str, target: int) -> list:
        if not num:
            return []
        self.size = len(num)
        self.num = num
        self.now.append(num[0])
        self.dfs(0, num[0] == "0")
        ans = []
        for ss in self.sign:
            if eval(ss) == target:
                ans.append(ss)
        return ans
    def dfs(self, i, zero_start):
        if i == self.size - 1:
            self.sign.append("".join(self.now))
        else:
            self.now.extend(["+", self.num[i + 1]])
            self.dfs(i + 1, self.num[i + 1] == "0")
            self.now.pop()
            self.now.pop()
            self.now.extend(["-", self.num[i + 1]])
            self.dfs(i + 1, self.num[i + 1] == "0")
            self.now.pop()
            self.now.pop()
            self.now.extend(["*", self.num[i + 1]])
            self.dfs(i + 1, self.num[i + 1] == "0")
            self.now.pop()
            self.now.pop()
            if not zero_start:
                self.now.extend([self.num[i + 1]])
                self.dfs(i + 1, False)
                self.now.pop()

if __name__ == '__main__':
	s = Solution()
	print(s.addOperators(num = "123", target = 6))
	s = Solution()
	print(s.addOperators(num = "232", target = 8))
	s = Solution()
	print(s.addOperators(num = "105", target = 5))
	s = Solution()
	print(s.addOperators(num = "00", target = 0))
	s = Solution()
	print(s.addOperators(num = "3456237490", target = 9191))
	s = Solution()
	print(s.addOperators(num = "3335", target = 24))

输出:

['1+2+3', '1*2*3']
['2+3*2', '2*3+2']
['1*0+5', '10-5']
['0+0', '0-0', '0*0']
[]
['3*3+3*5']

注:这个可以做简单的“算24”小游戏


🌟 每日一练刷题专栏

 持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

 收藏,你的青睐是我努力的方向! 

✏️ 评论,你的意见是我进步的财富!  

C/C++ 每日一练 ​专栏

​​

Python 每日一练 专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/401149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分隔链表(精美图示详解哦)

全文目录引言分隔链表题目描述与思路实现总结引言 前面&#xff0c;我们熟悉了管理链表中的数据的方法&#xff0c;也了解了几道与链表相关的题目&#xff1a; 戳我看单链表详解哦 在本篇文章中&#xff0c;我们将再了解一道题目&#xff1a;分隔链表&#xff1a; 分隔链表OJ…

【Python】用Python实现帕累托图

作为一名多次创业者和项目管理培训师&#xff0c; 今天田辛老师要做一件跨界的事情。 一方面&#xff0c; 田老师整理了项目管理中的重要质量管理工具 “帕累托图”&#xff0c; 另一方面&#xff0c;田老师给到了帕累托图的Python的实现方式。 如果您只对Python实现方式感兴趣…

思科模拟器 | 交换机与路由器的配置汇总【收藏备用】

文章目录一、vlan配置【实现同一vlan的主机通信】1、基本配置和接线2、vlan配置与端口连接3、测试连接二、truck配置【实现连接在不同交换机上的同一vlan的主机通信】1、基本配置和接线2、vlan配置与端口连接3、打truck做连接3、测试连接三、静态路由配置1、自定义IP地址2、基本…

品牌营销 | 学习如何最大限度地发挥品牌营销的作用

您是否想过如何最大限度地发挥品牌营销的潜力&#xff1f;这是一项艰巨的挑战&#xff0c;通过了解品牌营销的基本组成部分&#xff0c;您可以成功地推广您的品牌。 &#xff08;图源&#xff1a;Pixabay&#xff09; 品牌营销的基本组成部分 你需要做什么来发展稳固的品牌&am…

STC89C51单片机相比于其他单片机具有那些优点?

STC89C51只适合和同性能的51内核单片机相比&#xff0c;性能不同并无可比性。11年前&#xff0c;我就是通过自学STC89C51入行单片机开发的。到目前为止都非常经典&#xff0c;很多开发板都是基于这个芯片去做的。我对STC单片机也是比较有好感的&#xff0c;一般51单片机的产品基…

【Java|golang】2379. 得到 K 个黑块的最少涂色次数---滑动窗口

给你一个长度为 n 下标从 0 开始的字符串 blocks &#xff0c;blocks[i] 要么是 ‘W’ 要么是 ‘B’ &#xff0c;表示第 i 块的颜色。字符 ‘W’ 和 ‘B’ 分别表示白色和黑色。 给你一个整数 k &#xff0c;表示想要 连续 黑色块的数目。 每一次操作中&#xff0c;你可以选…

07 C语言数组

07 C语言数组 1、初试数组 #include<stdio.h>int main(int argc,char const *argv[]){double sum;int a[100];int i 0;int cnt 0;scanf("%d",&i);while(i ! -1){sum i;a[cnt] i;scanf("%d",&i);}if(cnt > 0){double average sum / …

深入堆空间

堆空间用来干嘛的&#xff1f;我们知道基础类型的变量、对象的引用既可以在栈也可以在堆上&#xff0c;但是对象一定是在堆空间的。堆上存储的是从GC Root可达的活跃对象。什么是GC Root&#xff1f;垃圾回收器在判断哪些对象该回收的时候&#xff0c;需要一个标准&#xff0c;…

初识项目管理

项目的特性 项目是一项 临时性 的工作&#xff0c;即所有的项目都有确定的开始和结束时间。项目的目的是创造 独特 的产品、服务或成果。项目具有 渐近明细性&#xff0c;即项目随着时间的推移&#xff0c;相关信息逐渐清晰。 项目举例 万事皆项目&#xff1a; 开发信息系统…

川农机械专业小伙转行Java开发,年薪20w

本期学员就业故事&#xff0c;知了姐邀请到一位“特别”的同学&#xff0c;一位从知了堂就业成功近两年的学员再度接受我们的采访。 来自四川农业大学的曾同学&#xff0c;一个本来学机械开挖掘机的粗犷男人&#xff0c;因为不断地努力学习编程&#xff0c;最终成为一个性格闷…

轻松掌握C++的模板与类模板,将Tamplate广泛运用于我们的编程生活

C提高编程 本阶段主要针对C泛型编程和STL技术做详细讲解&#xff0c;探讨C更深层的使用 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 模板 1.模板的概念 模板就是建立通用的模具&#xff0c;大大提高复用性 例如&#xff1a; 2.函数模板 C另一种编程思想称…

【二分查找】数的范围

数的范围思路二分查找左边界右边界代码实现思路 题目主要的意思在一个升序也就是有序的数组中 找到一段相同数组的起始位置和最终位置 也就是查找两个数的问题 题目给的是升序数列让人很容易想到二分查找来查找两个数 二分查找 我们此时的问题就转化为查找到这段序列的起始位…

Python中变量的作用域精讲

文章目录前言一、局部变量二、全局变量前言 变量的作用域是指程序代码能够访问该变量的区域&#xff0c;如果超出该区域&#xff0c;再访问时就会出现错误。在程序中&#xff0c;一般会根据变量的 “有效范围” 将变量分为 “全局变量” 和 “局部变量”。 一、局部变量 局部变…

Linux——进程间通信1

目录 进程间通信目的 进程间通信标准 管道 匿名管道 管道实现进程间通信 管道的特点 进程池 ProcessPool.cc Task.hpp 习题 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件…

前端的浮点数计算问题

加 //加 export const add (num1, num2) > {var r1, r2, m, ctry {r1 num1.toString().split(.)[1].length} catch (e) {r1 0}try {r2 num2.toString().split(.)[1].length} catch (e) {r2 0}c Math.abs(r1 - r2)m Math.pow(10, Math.max(r1, r2))if (c > 0) {va…

Vue3通透教程【七】生命周期函数

文章目录&#x1f31f; 写在前面&#x1f31f; 生命周期钩子函数&#x1f31f; 组合式API生命周期&#x1f31f; 写在最后&#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相关技术文章&am…

性能优化之前端项目性能优化的几种方案

加载优化&#xff0c;减少http请求一个完整的 HTTP 请求需要经历 DNS 查找&#xff0c;TCP 握手&#xff0c;浏览器发出 HTTP 请求&#xff0c;服务器接收请求&#xff0c;服务器处理请求并发回响应&#xff0c;浏览器接收响应等过程。Queueing: 在请求队列中的时间。Stalled: …

5.1 STM32学习 中断系统和EXTI外部中断

中断系统中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行。中断优先级&#xff1a;当…

框架篇-面试题6-说一下Vue2与Vue3的钩子函数

Vue钩子函数是在Vue实例从创建到销毁的过程中自动执行的函数&#xff08;在特定的阶段,能够自动自执行的函数&#xff09;钩子函数用来描述一个组件从引入(创建)到退出(销毁)的全过程中的某个过程Vue2生命周期钩子函数整个过程称为生命周期Vue钩子函数按照组件生命周期的过程分…

作为一名程序员少不了的软件

写在前面的话 就现今我自己接触的项目而言&#xff0c;我发现对于一名程序员来说有些软件是真的必不可少的&#xff0c;防止下次换电脑或者要换操作系统的时候用&#xff0c;特此记录一下。 一、最常使用的&#xff0c;JetBrain全家桶&#xff08;idea、pycharm、webstorm&…