Python & Leetcode

12. Integer to Roman


题目描述:

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol Value
I    1
V   5
X   10
L    50
C   100
D   500
M   1000
For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

I can be placed before V (5) and X (10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.

Example 1:

Input: 3
Output: “III”
Example 2:

Input: 4
Output: “IV”
Example 3:

Input: 9
Output: “IX”
Example 4:

Input: 58
Output: “LVIII”
Explanation: C = 100, L = 50, XXX = 30 and III = 3.
Example 5:

Input: 1994
Output: “MCMXCIV”
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.



解题思路:

当接受一个整数时,采用类似于贪心算法的思路,从大到小的查询字符。



解题代码:

class Solution(object):
 def intToRoman(self, num):
“””
:type num: int
:rtype: str
“””
 res = ”
 while num > 0:
  if num >= 1000:
   res += ‘M’
   num -= 1000
  elif num >= 900:
   res += ‘CM’
   num -= 900
  elif num >= 500:
   res += ‘D’
   num -= 500
  elif num >= 400:
   res +=’CD’
   num -= 400
  elif num >= 100:
   res += ‘C’
   num -= 100
  elif num >= 90:
   res += ‘XC’
   num -= 90
  elif num >= 50:
   res += ‘L’
   num -= 50
  elif num >= 40:
   res += ‘XL’
   num -= 40
  elif num >= 10:
   res += ‘X’
   num -= 10
  elif num >= 9:
   res += ‘IX’
   num -= 9
  elif num >= 5:
   res += ‘V’
   num -= 5
  elif num >= 4:
   res += ‘IV’
   num -= 4
  else:
   res +=’I’
   num -= 1
 return res




33. Search in Rotated Sorted Array


题目描述:

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm’s runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Example 2:

Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1



解题思路:

直接调用python的内置函数index()找出目标数目的位置即可



解题代码:

class Solution:
 def search(self, nums, target):
  if target in nums:
   return nums.index(target)
 return -1




41. First Missing Positive


题目描述:

Given an unsorted integer array, find the smallest missing positive integer.
Example 1:

Input: [1,2,0]
Output: 3
Example 2:

Input: [3,4,-1,1]
Output: 2
Example 3:

Input: [7,8,9,11,12]
Output: 1

Note:

Your algorithm should run in O(n) time and uses constant extra space.



解题思路:

利用python内置函数sorts()将列表排序,然后从前往后查找,找到缺失的最小正整数



解题代码:

def firstMissingPositive(self, nums):
 nums = sorted(nums)
 cur = 1
 last = None
 for item in nums:
 if item > 0:
  if item == cur:
   last = item
   cur += 1
  elif not last == item:
   return cur
  return cur

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值