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;}}


原创粉丝点击