渣渣的Leetcode之旅(Python3)_打卡(12,15,917,7,8)
12.整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值 I
1 V
5 X
10 L
50 C
100 D
500 M
1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX
- V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5
的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
示例 1:
输入: 3 输出: “III”
示例 2:
输入: 4 输出: “IV”
示例 3:
输入: 9 输出: “IX”
示例 4:
输入: 58 输出: “LVIII” 解释: L = 50, V = 5, III = 3.
示例 5:
输入: 1994 输出: “MCMXCIV” 解释: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
1 <= num <= 3999
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/integer-to-roman
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:def intToRoman(self, num: int) -> str:str = ''dict = {1:'I',5:'V',10:'X',50:'L',100:'C',500:'D',1000:'M',4:'IV',9:'IX',40:'XL',90:'XC',400:'CD',900:'CM'}while True:if num == 0:breakif num >= 1000:num -= 1000str += dict[1000]continueif num >= 900:num -= 900str += dict[900]continueif num >= 500:num -= 500str += dict[500]continueif num >= 400:num -= 400str += dict[400]continueif num >= 100:num -= 100str += dict[100]continueif num >= 90:num -= 90str += dict[90]continueif num >= 50:num -= 50str += dict[50]continueif num >= 40:num -= 40str += dict[40]continueif num >= 10:num -= 10str += dict[10]continueif num >= 9:num -= 9str += dict[9]continueif num >= 5:num -= 5str += dict[5]continueif num >= 4:num -= 4str += dict[4]continueif num >= 1:num -= 1str += dict[1]continuereturn str
15.三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = [] 输出:[]
示例 3:
输入:nums = [0] 输出:[]
提示:
0 <= nums.length <= 3000 -105 <= nums[i] <= 105
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
用三层循环,时间复杂度O(n^3)会超时
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:ans = []if len(nums) < 3:return ansnums.sort()for i in range(len(nums)-2):if i > 0 and nums[i] == nums[i-1]:continuefor j in range(i+1,len(nums)-1):if j > i+1 and nums[j] == nums[j-1]:continuefor z in range(j+1,len(nums)):if z > j + 1 and nums[z] == nums[z-1]:continueif nums[i] + nums[j] + nums[z] == 0:ans.append([nums[i],nums[j],nums[z]])return ans
优化一下,最后一层for循环优化为指针:
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:ans = []if len(nums) < 3:return ansnums.sort() for i in range(len(nums)-2):c = len(nums) - 1if i > 0 and nums[i] == nums[i-1]:continueif nums[i] > 0:breakfor j in range(i+1,len(nums)-1): if j > i+1 and nums[j] == nums[j-1]:continuewhile nums[i] + nums[j] + nums[c] > 0 and j < c:c -= 1 if c==j:breakif nums[i] + nums[j] + nums[c] == 0:ans.append([nums[i],nums[j],nums[c]]) return ans
917. 仅仅反转字母
给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。
示例 1:
输入:“ab-cd” 输出:“dc-ba”
示例 2:
输入:“a-bC-dEf-ghIj” 输出:“j-Ih-gfE-dCba”
示例 3:
输入:“Test1ng-Leet=code-Q!” 输出:“Qedo1ct-eeLg=ntse-T!”
提示:
S.length <= 100 33 <= S[i].ASCIIcode <= 122 S 中不包含 \ or "
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-only-letters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution:def reverseOnlyLetters(self, S: str) -> str:list_01 = list(S)list_02 = []point = -1for i in list_01:while True:if point <= -1*len(S):breakif 65<=ord(S[point])<=90 or 97<=ord(S[point])<=122:breakelse:point -= 1if 65<=ord(i)<=90 or 97<=ord(i)<=122:list_02.append(S[point])point -= 1else:list_02.append(i)str_01 = ''for i in list_02:str_01 += ireturn str_01
7.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1: 输入: 123 输出: 321示例2: 输入: -123 输出: -321示例3: 输入: 120 输出: 21注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
class Solution:def reverse(self, x: int) -> int:a = []middle=0if x>=0 and x <=9:return xif x > 0:middle=1 # middle为1代表最后返回正数else:x=-1*x # middle 为0代表最后返回负数# 2^31-1=2147483647,-2^31=-2147483648while True:a.append(x%10)x=x/10x = int(x)if x<10:a.append(x)x=0breakif len(a) == 10 and a[0] > 2:return 0if len(a) > 10:return 0dummp=1for i in range(0,len(a)):for j in range(i,len(a)-1):dummp=dummp*10x+=a[i]*dummpdummp=1if middle == 1:if x > 2147483647:return 0else:return x if middle == 0:x=-1*xif x < -2147483648:return 0else:return x
8. 字符串转换整数
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格 检查第一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。 返回整数作为最终结果。注意: 本题中的空白字符只包括空格字符 ’ ’ 。 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。示例1: 输入:str = “42” 输出:42 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。 第 1 步:“42”(当前没有读入字符,因为没有前导空格) ^ 第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’) ^ 第 3 步:“42”(读入 “42”) ^ 解析得到整数 42 。 由于 “42” 在范围 [-231, 231 - 1] 内,最终结果为 42 。示例2: 输入:str = " -42" 输出:-42 解释: 第 1 步:" -42"(读入前导空格,但忽视掉) ^ 第 2 步:" -42"(读入 ‘-’ 字符,所以结果应该是负数) ^ 第 3 步:" -42"(读入 “42”) ^ 解析得到整数 -42 。 由于 “-42” 在范围 [-231, 231 - 1] 内,最终结果为 -42 。示例3: 输入:str = “4193 with words” 输出:4193 解释: 第 1 步:“4193 with words”(当前没有读入字符,因为没有前导空格) ^ 第 2 步:“4193 with words”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’) ^ 第 3 步:“4193 with words”(读入 “4193”;由于下一个字符不是一个数字,所以读入停止) ^ 解析得到整数 4193 。 由于 “4193” 在范围 [-231, 231 - 1] 内,最终结果为 4193 。示例4: 输入:str = “words and 987” 输出:0 解释: 第 1 步:“words and 987”(当前没有读入字符,因为没有前导空格) ^ 第 2 步:“words and 987”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’) ^ 第 3 步:“words and 987”(由于当前字符 ‘w’ 不是一个数字,所以读入停止) ^ 解析得到整数 0 ,因为没有读入任何数字。 由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0 。示例5: 输入:str = “-91283472332” 输出:-2147483648 解释: 第 1 步:"-91283472332"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"-91283472332"(读入 ‘-’ 字符,所以结果应该是负数) ^ 第 3 步:"-91283472332"(读入 “91283472332”) ^ 解析得到整数 -91283472332 。 由于 -91283472332 小于范围 [-231, 231 - 1] 的下界,最终结果被截断为 -231 = -2147483648 。提示: 0 <= s.length <= 200 s 由英文字母(大写和小写)、数字(0-9)、’ ‘、’+’、’-’ 和 ‘.’ 组成
INT_MAX = 2 ** 31 - 1
INT_MIN = -2 ** 31
class Solution:def myAtoi(self, s: str) -> int:if len(s)==0:return 0a = []dummp = 0#数字必须连续,+,-号之后只能跟数字for i in range(len(s)):if dummp == 0:if ord(s[i]) == 32 :continue if ord(s[i]) == 45 :dummp = -1continueif ord(s[i]) == 43 :dummp = 1continueif 48<=ord(s[i])<=57 :dummp = 1a.append(s[i])continue return 0 if abs(dummp) == 1:if 48<=ord(s[i])<=57:a.append(s[i])else:breakif len(a)!=0 and ord(a[0]) == 48:a.pop(0)if len(a)==0:return 0str_a = '' #定义一个空字符串for i in range(len(a)):x = str(a[i])str_a = str_a + x #字符串叠加,将列表中的所有元素提取,放入字符串str_a中if dummp == 1:if int(str_a) > INT_MAX:return INT_MAXelse:return int(str_a) if dummp == -1:if -int(str_a) < INT_MIN:return INT_MINelse:return -int(str_a)
渣渣的Leetcode之旅(Python3)_打卡(12,15,917,7,8)相关推荐
- 前端工程师的 LeetCode 之旅 -- 周赛 185
01 重新格式化化字符串 题目描述[Easy] 给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母. 请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同.也就是说,字母后面应该跟 ...
- 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java
<LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...
- poi 公式转 图片_三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云
本文出自微信公众号[碧海风云]之<三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云> 公式符号概述 英国原伦敦南岸大学数学教授大卫·辛马斯特(David Breyer Sin ...
- 信用卡知识:自动扣款日不等于最后还款日_刷卡技巧_财经_腾讯网
信用卡知识:自动扣款日不等于最后还款日_刷卡技巧_财经_腾讯网 信用卡知识:自动扣款日不等于最后还款日_刷卡技巧_财经_腾讯网 信用卡知识:自动扣款日不等于最后还款日 posted on 2014-0 ...
- 中leetcode提示未登录_分享一款将 LeetCode 中 AC 的题目转化为 MarkDown 表格的插件...
背景: 写博客的时候每当新增 LeetCode 题解时都需要在 LeetCode/README 手动更新表格, 非常费劲.因此构思了 crd-leetcode-cli 插件实现自动化同步更新 leet ...
- LeetCode | 我的LeetCode之旅(持续更新ing)
我的LeetCode算法之旅,记录每天学习LeetCode的进程目录. 算法思想 1.双指针 LeetCode167 | 有序数组的 Two Sum 167.Two Sum II - Input ar ...
- python3 _笨方法学Python_日记_DAY3
Day3 习题 13: 参数.解包.变量 from sys import argvscript, first, second, third = argvprint("The script ...
- 小黑静待身边朋友的考研佳音,明天准备面试,在白塔咖啡帐篷里的一下午的leetcode之旅:70. 爬楼梯
小黑代码:记忆化搜索 class Solution:def climbStairs(self, n: int) -> int:# 记忆字典map_ = {}# 递归搜索函数def dfs(res ...
- 小黑为四川大学实习金融专业同学解决了困扰好久的一个代码小bug,获得成就感,和清华实习同学约饭啦(被请客),继续向前的leetcode之旅:145. 二叉树的后序遍历
小黑递归代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, ...
最新文章
- github下载慢,轻松提速教程
- 为什么说中国式报表特殊-5.4 填报
- hdu 2586(LCA + 节点间距离)
- 如何把SAP CRM产品主数据隐藏的batch ID字段显示出来
- 重温设计模式之 Factory
- 深入分析之Cluster层
- 非结构化数据上下文中的GraphQL
- 如何加入github开源项目!
- 最短路径例题(Floyd、Dijkstra)
- 小米id锁状态查询_怎么通过序列号查询苹果手机真伪
- pcb板制作流程图解
- 微信双开方法windows Mac iOS
- 淘宝为何总是有骗子账号屡禁不止,气愤之下只能发帖告诫了
- 如何求子网掩码,默认网关地址,网络地址
- 对指定网站渗透的一些总结
- asterisk meetme 会议实现
- 对比 GA 、PSO 、DE三种算法 求解连续优化问题的性能
- FPGA VerilogHDL语言 数字钟 按键消抖
- 什么是善辩型人格?善辩性人格的职业分析
- 大牛讲解信号与系统(通俗易懂)
热门文章
- 可视化bi平台与大数据分析的关系
- 【云栖大会】菜鸟网络CTO王文彬:智慧互联 重构物流
- AIX 报错“BFE4C025 P H sysplanar0 UNDETERMINED ERROR”
- UCI on PUSCH 协议角度解析
- AndroidStudio连接第三方模拟器的简易方法
- 如果有天,全世界的人都变成程序员......
- c++ 编译添加dll_(windows平台下)深入详解C++创建动态链接库DLL以及如何使用它(一)...
- 快速入门:LINUX基础 ——教你使用 linux 操作
- Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~
- 如何替换一个Linux内核函数的实现-热补丁原理