[LeetCode]12. Integer to Roman解法及python代码
2018-01-21 13:54
645 查看
原题链接:https://leetcode.com/problems/integer-to-roman
这个题我最开始的想法很简单,由于限制输入在1~3999之间,所以可以写出1~10,10~3999间的能整除10的数的罗马数字,对于输入使用整数除法以及求余处理就可以O(1)的得到结果,下面代码:
接下来的代码纯粹出于个人练习,提高coding能力。因为这种题主要是规律的总结,需要在写的过程中比较细心,下面是代码,主要注意的点就是4和9的处理上:
这个题我最开始的想法很简单,由于限制输入在1~3999之间,所以可以写出1~10,10~3999间的能整除10的数的罗马数字,对于输入使用整数除法以及求余处理就可以O(1)的得到结果,下面代码:
class Solution(object): def intToRoman1(self, num): """ :type num: int :rtype: str """ M = ["", "M", "MM", "MMM"] C = ["", "C", "CC", < 4000 span class="hljs-string">"CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"] X = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"] I = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"] return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10]
接下来的代码纯粹出于个人练习,提高coding能力。因为这种题主要是规律的总结,需要在写的过程中比较细心,下面是代码,主要注意的点就是4和9的处理上:
class Solution(object): """ 锻炼能力的方法 """ def intToRoman(self, num): """ :type num: int :rtype: str """ base = ["I","II","III","IV","V","VI","VII","VIII","IX","X","L","C","D","M"] baseNum = 1000 romanStr = "" while num > 10: temp = num/baseNum if temp !=0: if baseNum == 1000: for i in range(temp): romanStr = romanStr + base[13] num = num - temp*baseNum baseNum = baseNum/10 continue if baseNum == 100: if temp < 4: for i in range(temp): romanStr = romanStr + base[11] elif temp == 4: romanStr = romanStr + base[11] + base[12] elif temp > 4 and temp <9: romanStr = romanStr + base[12] for i in range(temp-5): romanStr = romanStr + base[11] else: romanStr = romanStr + base[11] + base[13] num = num - temp*baseNum baseNum = baseNum/10 continue if baseNum == 10: if temp < 4: for i in range(temp): romanStr = romanStr + base[9] elif temp == 4: romanStr = romanStr + base[9] + base[10] elif temp > 4 and temp <9: romanStr = romanStr + base[10] for i in range(temp-5): romanStr = romanStr + base[9] else: romanStr = romanStr + base[9] + base[11] num = num - temp*baseNum baseNum = baseNum/10 continue else: baseNum = baseNum/10 if num != 0: romanStr = romanStr + base[num-1] return romanStr
相关文章推荐
- [LeetCode]563. Binary Tree Tilt解法及python代码
- [LeetCode]34. Search for a Range解法及python代码
- [LeetCode]669. Trim a Binary Search Tree解法及python代码
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
- LeetCode 322. Coin Change Python 动态规划/BFS解法
- 【原创】用Python爬取LeetCode的AC代码到Github
- LeetCode:1. Two Sum解法(C,C++,Jave,Python)
- LeetCode Single Number III (Java和Python代码)
- leetcode-Two sum(最佳思路以及python代码实现)
- LeetCode 139. Word Break 动态规划DP Python解法
- LeetCode - Two Sum 完整代码(python)
- 【LeetCode】【Python】【C++】2. Add Two Numbers代码实现
- LeetCode 22. Generate Parentheses 生成括号 Python 回溯解法
- leetcode -- Multiply Strings -- python容易处理,需要看其他解法
- [LeetCode]11. Container With Most Water解法及python
- 【LeetCode】【Python】【C++】7. Reverse Integer代码实现
- Leetcode 78. Subsets Python DFS 深度优先搜索解法
- [LeetCode]Maximum Depth of Binary Tree(递归和层序遍历解法)@python
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
- LeetCode 64 Minimum Path Sum(Python详解及代码实现)