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