leetcode 13 罗马数字转10进制
来源:互联网 发布:打开本机端口 编辑:程序博客网 时间:2024/05/16 00:58
leetcode 13 罗马数字转10进制
今天是第一天开刷leetcode。知道了QJ神马玩意 ^^… .感觉自己算法简直弱爆了,小学生都可以吊打。事实就是这样,但有颗不服气的心,一直想去提高自己的算法水平,但又不知道何从下手,于是乎丛刷题开始,由点及面,总会有提高的^^。也不知道刷完了的感觉会是怎么样的,算法水平到底会提高到如何程度, 是葵花宝典 ,还是辟邪剑谱。这几个月会努力刷题。
思路:
1:了解罗马数字。这题是罗马数字到10进制的转换。看到这题我得思路是先去了解罗马数字的规则。每个罗马数字的含义和组数规则。
2:数据结构。如何把罗马数字和10进制对应起来。
3:算法部分基于的逻辑。如果左边的数大于等于右边的数,和=左边+右边。反之 和=左边-右边。
上代码:
static int romanToInt(String s) { Map<Character,Integer> map =new HashMap<Character,Integer>(); map.put('I', 1); map.put('V', 5); map.put('X', 10); map.put('L', 50); map.put('C', 100); map.put('D', 500); map.put('M', 1000); char[] charArray = s.toCharArray(); int sum=0; for(int i=charArray.length-1;i>=0;i--) { char c1 = charArray[i]; //考虑到第一个数字会越界做处理 int tmp=i+1>charArray.length-1?charArray.length-1:i+1; char c2=charArray[tmp]; //左边>=右边 if(map.get(c1)>=map.get(c2)) { sum+=map.get(c1); }else { sum-=map.get(c1); } } return sum; }
其他解法。。
→_→
看了别人的做法 switch case 。
static int romanToIntV2(String s) { char[] charArray = s.toCharArray(); int sum = 0; // 记录之前的数字 int pre = -1; int curNum = -1; for (int i = charArray.length - 1; i >= 0; i--) { char c1 = charArray[i]; switch (c1) { case 'I': curNum = 1; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; case 'X': curNum = 10; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; case 'V': curNum = 5; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; case 'L': curNum = 50; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; case 'C': curNum = 100; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; case 'D': curNum = 500; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; case 'M': curNum = 1000; if (curNum >= pre) { sum += curNum; } else { sum -= curNum; } pre = curNum; break; default: break; } } return sum;}
时间复杂度 O(1)
空间复杂度 O(1)
一直在想这题的解法用数组如何解。discuss看到了。挺满意的
罗马数字转10进制,再对10进制数字操作。
static int romanToIntV3(String s) {
char[] charArray = s.toCharArray();
int [] int_array=new int [charArray.length];
int sum=0;
for (int i = 0; i < s.length(); i++) { switch (charArray[i]) { case 'I': int_array[i] = 1; break; case 'V': int_array[i] = 5; break; case 'X': int_array[i] = 10; break; case 'L': int_array[i] = 50; break; case 'C': int_array[i] = 100; break; case 'D': int_array[i] = 500; break; case 'M': int_array[i] = 1000; break; } } for(int j=0;j<int_array.length;j++) { if(j+1<int_array.length && int_array[j]<int_array[j+1]) { sum-=int_array[j]; }else { sum+=int_array[j]; } } return sum;}
zzzz 睡觉。
0 0
- leetcode 13 罗马数字转10进制
- [leetcode:13] 罗马数字转十进制
- leetcode-13-罗马数字转阿拉伯数字
- LeetCode 罗马数字转整数
- Leetcode 13题 罗马数字转换为整形
- 【Leetcode-13】罗马数字转换为阿拉伯数字
- Roman to Integer 罗马数字转阿拉伯数字@LeetCode
- Integer to Roman 阿拉伯数字转罗马数字@LeetCode
- LeetCode Roman to Integer 罗马数字转阿拉伯数字
- [LeetCode]-Integer to Roman 阿拉伯数字转罗马数字
- [LeetCode]Integer to Roman整数转罗马数字
- (LeetCode) Roman to Integer --- 罗马数字转整数
- leetcode 12.IntegertoRoman(整形转罗马数字)
- leetcode-java.T012_IntegerToRoman 数字转罗马数字
- 罗马数字转整形(LeetCode题目)
- Leetcode简单题罗马数字转整数
- [LeetCode-13] Roman to Integer(罗马数字转成阿拉伯数字)
- leetcode 13 Roman to Integer(罗马数字转换为整数)
- Linux中的service命令
- Android动画之Tween Animation
- py2exe打包matplotlib
- 你们是不是很缺大数据工程师?
- ListView
- leetcode 13 罗马数字转10进制
- ToggleButton和RadioButton
- 判断内存地址是否缺页
- 【Linux】Ubuntu装好之后出现插入网线被提示没有插入网线情况的解决方案
- 定义 Android 清单
- php curl使用小示例
- STM32-LPC bug汇总
- 系统更改
- PAT 1009. 说反话 (20)