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)相关推荐

  1. 前端工程师的 LeetCode 之旅 -- 周赛 185

    01 重新格式化化字符串 题目描述[Easy] 给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母. 请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同.也就是说,字母后面应该跟 ...

  2. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java

    <LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...

  3. poi 公式转 图片_三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云

    本文出自微信公众号[碧海风云]之<三阶魔方公式符号图解V2.0(2017/12/15)_碧海风云> 公式符号概述 英国原伦敦南岸大学数学教授大卫·辛马斯特(David Breyer Sin ...

  4. 信用卡知识:自动扣款日不等于最后还款日_刷卡技巧_财经_腾讯网

    信用卡知识:自动扣款日不等于最后还款日_刷卡技巧_财经_腾讯网 信用卡知识:自动扣款日不等于最后还款日_刷卡技巧_财经_腾讯网 信用卡知识:自动扣款日不等于最后还款日 posted on 2014-0 ...

  5. 中leetcode提示未登录_分享一款将 LeetCode 中 AC 的题目转化为 MarkDown 表格的插件...

    背景: 写博客的时候每当新增 LeetCode 题解时都需要在 LeetCode/README 手动更新表格, 非常费劲.因此构思了 crd-leetcode-cli 插件实现自动化同步更新 leet ...

  6. LeetCode | 我的LeetCode之旅(持续更新ing)

    我的LeetCode算法之旅,记录每天学习LeetCode的进程目录. 算法思想 1.双指针 LeetCode167 | 有序数组的 Two Sum 167.Two Sum II - Input ar ...

  7. python3 _笨方法学Python_日记_DAY3

    Day3 习题  13:  参数.解包.变量 from sys import argvscript, first, second, third = argvprint("The script ...

  8. 小黑静待身边朋友的考研佳音,明天准备面试,在白塔咖啡帐篷里的一下午的leetcode之旅:70. 爬楼梯

    小黑代码:记忆化搜索 class Solution:def climbStairs(self, n: int) -> int:# 记忆字典map_ = {}# 递归搜索函数def dfs(res ...

  9. 小黑为四川大学实习金融专业同学解决了困扰好久的一个代码小bug,获得成就感,和清华实习同学约饭啦(被请客),继续向前的leetcode之旅:145. 二叉树的后序遍历

    小黑递归代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, ...

最新文章

  1. github下载慢,轻松提速教程
  2. 为什么说中国式报表特殊-5.4 填报
  3. hdu 2586(LCA + 节点间距离)
  4. 如何把SAP CRM产品主数据隐藏的batch ID字段显示出来
  5. 重温设计模式之 Factory
  6. 深入分析之Cluster层
  7. 非结构化数据上下文中的GraphQL
  8. 如何加入github开源项目!
  9. 最短路径例题(Floyd、Dijkstra)
  10. 小米id锁状态查询_怎么通过序列号查询苹果手机真伪
  11. pcb板制作流程图解
  12. 微信双开方法windows Mac iOS
  13. 淘宝为何总是有骗子账号屡禁不止,气愤之下只能发帖告诫了
  14. 如何求子网掩码,默认网关地址,网络地址
  15. 对指定网站渗透的一些总结
  16. asterisk meetme 会议实现
  17. 对比 GA 、PSO 、DE三种算法 求解连续优化问题的性能
  18. FPGA VerilogHDL语言 数字钟 按键消抖
  19. 什么是善辩型人格?善辩性人格的职业分析
  20. 大牛讲解信号与系统(通俗易懂)

热门文章

  1. 可视化bi平台与大数据分析的关系
  2. 【云栖大会】菜鸟网络CTO王文彬:智慧互联 重构物流
  3. AIX 报错“BFE4C025 P H sysplanar0 UNDETERMINED ERROR”
  4. UCI on PUSCH 协议角度解析
  5. AndroidStudio连接第三方模拟器的简易方法
  6. 如果有天,全世界的人都变成程序员......
  7. c++ 编译添加dll_(windows平台下)深入详解C++创建动态链接库DLL以及如何使用它(一)...
  8. 快速入门:LINUX基础 ——教你使用 linux 操作
  9. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~
  10. 如何替换一个Linux内核函数的实现-热补丁原理