leetcode-java.T013_RomarToInteger 罗马数字转成整数数字
来源:互联网 发布:网络玄幻小说典藏版 编辑:程序博客网 时间:2024/06/05 10:18
每天坚持刷leetcode----罗马数字转整数数字:
package leetcode.T013_RomarToInteger;/** * @Title: Solution.java * @Package leetcode.T013_RomarToInteger * @Description: TODO * @author zhouzhixiang * @date 2017-6-4 下午11:58:22 * @version V1.0 */public class Solution {/** * <pre> * 原题 * Given a roman numeral, convert it to an integer. * Input is guaranteed to be within the range from 1 to 3999. * * 题目大意 * 给定一个罗马数字,将其转换成对应的整数。 * 输入的数字在1-3999之间。 * * 解题思路 * 根据罗马数字与整数数字对应关系进行加法操作,如果前一个数字比后一个大就相减,否则进行相加。 * </pre> * * @param s * @return */public static void main(String[] args) {//int result = Solution.RomarToInteger("CXCIX");//int result = Solution.RomarToInteger2("CXCIX");int result = Solution.RomarToInteger3("CXCIX");System.out.println(result);}/** * <pre> * 参考: * 解题思路: * 根据罗马数字与整数数字对应关系进行加法操作,如果前一个数字比后一个大 * 就相减,小就相加 * * </pre> */public static int RomarToInteger3(String str){// I 1// V 5// X 10// L 50// C 100// D 500// M 1000int result = 0;int pre = 0;for(int i=str.length()-1; i>=0; i--){switch(str.charAt(i)){case 'I':if(1<pre){result -= 1;}else{result += 1;}pre = 1;break; case 'V':if(5<pre){result -= 5;}else{result += 5;}pre = 5;break;case 'X':if(10<pre){result -= 10;}else{result += 10;}pre = 10;break;case 'L':if(50<pre){result -= 50;}else{result += 50;}pre = 50;break;case 'C':if(100<pre){result -= 100;}else{result += 100;}pre = 100;break;case 'D':if(500<pre){result -= 500;}else{result += 500;}pre = 500;break;case 'M':if(1000<pre){result -= 1000;}else{result += 1000;}pre = 1000;break;}}return result;}// I 1// V 5// X 10// L 50// C 100// D 500// M 1000/** * 错误的程序--------------比如199-CXCIX 但是出来的结果是221 * 错误原因:没有考虑到前一个数字比后一个数字大的情况,大就相减,小就相加* @Title: RomarToInteger * @Description: TODO* @param @param s* @param @return * @return int * @throws */public static int RomarToInteger(String s){//DLII 552int len = s.length();int n1 = 0;int n5 = 0;int n10 = 0;int n50 = 0;int n100 = 0;int n500 = 0;int n1000 = 0;int result = 0;String[] a = new String[len];//String[] a = new String[]{"I","V","X","L","C","D","M"};char[] chars = s.toCharArray();for(int i=len-1;i>0;i--){char c = chars[i];String str = String.valueOf(c);a[i] = str;}for(int i=0; i<len;i++){if(s.charAt(i)=='I'){n1++;}if(s.charAt(i)=='V'){n5++;}if(s.charAt(i)=='X'){n10++;}if(s.charAt(i)=='L'){n50++;}if(s.charAt(i)=='C'){n100++;}if(s.charAt(i)=='D'){n500++;}if(s.charAt(i)=='M'){n1000++;}}result = result + 1000*n1000 + 500*n500 + 100*n100 + 50*n50 + 10*n10 + 5*n5 + 1*n1;return result;}// 修改public static int RomarToInteger2(String s){//DLII 552int len = s.length();int n1 = 0;int n5 = 0;int n10 = 0;int n50 = 0;int n100 = 0;int n500 = 0;int n1000 = 0;int result = 0;int pre = 0;String[] a = new String[len];//String[] a = new String[]{"I","V","X","L","C","D","M"};char[] chars = s.toCharArray();for(int i=len-1;i>0;i--){char c = chars[i];String str = String.valueOf(c);a[i] = str;}for(int i=len-1; i>=0;i--){if(s.charAt(i)=='I'){if(1<pre){n1--;}else{n1++;}pre = 1;}if(s.charAt(i)=='V'){if(5<pre){n5--;}else{n5++;}pre = 5;}if(s.charAt(i)=='X'){if(10<pre){n10--;}else{n10++;}pre = 10;}if(s.charAt(i)=='L'){if(50<pre){n50--;}else{n50++;}pre = 50;}if(s.charAt(i)=='C'){if(100<pre){n100--;}else{n100++;}pre = 100;}if(s.charAt(i)=='D'){if(500<pre){n500--;}else{n500++;}pre = 500;}if(s.charAt(i)=='M'){if(1000<pre){n1000--;}else{n1000++;}pre = 1000;}}result = result + 1000*n1000 + 500*n500 + 100*n100 + 50*n50 + 10*n10 + 5*n5 + 1*n1;return result;}}
阅读全文
0 0
- leetcode-java.T013_RomarToInteger 罗马数字转成整数数字
- LeetCode Integer to Roman数字转成罗马数字
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- 数字转换 转成罗马数字
- Leetcode 13 Roman to Integer 罗马数字转成整数
- leetcode-java.T012_IntegerToRoman 数字转罗马数字
- 【leetcode】小白题解:罗马数字转整数数字
- LeetCode 罗马数字转整数
- [LeetCode]罗马数字转为普通数字
- 13.Roman to Integer (罗马数字转成整数)
- [LeetCode]Integer to Roman整数转罗马数字
- leetcode 罗马数字与整数的转换算法
- (LeetCode) Roman to Integer --- 罗马数字转整数
- Leetcode练习<十八> 罗马数字转换为整数
- Leetcode简单题罗马数字转整数
- [LeetCode-13] Roman to Integer(罗马数字转成阿拉伯数字)
- 整数转换成罗马数字java实现
- Java - 计蒜客 - 整数转换成罗马数字
- 1.2 多个线程多个锁
- 377. Combination Sum IV | Leetcode Dynamic Programming
- leetcode 44. Wildcard Matching
- 限时独占2个月:曝OPPO R11前期独家使用骁龙660
- 输入输出流 (文件读写)
- leetcode-java.T013_RomarToInteger 罗马数字转成整数数字
- SUDT 3926 bLue的二叉树 [KMP or hash]【思维】
- 简单的在线留言系统
- leetcode-java.T012_IntegerToRoman 数字转罗马数字
- HackerRank
- 箭头函数写法在ReactJs中的使用
- 面试题目
- 133. Clone Graph
- RAC 中的双向数据绑定 RACChannel