zoukankan      html  css  js  c++  java
  • 「Leetcode」13. Roman to Integer(Java)

    分析

    把具体的情况一个一个实现即可,没有什么幺蛾子。

    代码

    class Solution {
        public int romanToInt(String s) {
            int ans = 0;
            for (int i=0; i!=s.length(); ++i)
            {
                switch(s.charAt(i))
                {
                    case 'I':
                        if(i<s.length()-1 && 
                          (s.charAt(i+1)=='X' || s.charAt(i+1)=='V'))
                        {
                            ans--; 
                            break;
                        }
                        ans++;
                        break;
                    case 'V':
                        ans+=5;
                        break;
                    case 'X':
                        if(i<s.length()-1 &&
                          (s.charAt(i+1)=='L' || s.charAt(i+1)=='C'))
                        {
                            ans-=10;
                            break;
                        }
                        ans+=10;
                        break;
                    case 'L':
                        ans+=50;
                        break;
                    case 'C':
                        if(i<s.length()-1 &&
                          (s.charAt(i+1)=='D' || s.charAt(i+1)=='M'))
                        {
                            ans-=100;
                            break;
                        }
                        ans+=100;
                        break;
                    case 'D':
                        ans+=500;
                        break;
                    case 'M':
                        ans+=1000;
                        break;
                    default: break;
                }
            }
            return ans;
        }
    }
    

    更好的代码

    精彩的代码就是能够把所表达的意思用更少的代码跑更快的速度。以下代码无疑实现了这个目标:

    class Solution {
        
        public static int romanToInt(String s) {
            int num = 0;
            int n = s.length();
            
            for (int i = 0; i < n-1; i++) {
                int curr = map(s.charAt(i));
                int next = map(s.charAt(i+1));
                num = curr < next ? num - curr : num + curr;
            }
            
            num += map(s.charAt(n-1));
            
            return num;
        }
        
        private static int map(char c) {
            switch(c) {
                case 'I': return 1;
                case 'V': return 5;
                case 'X': return 10;
                case 'L': return 50;
                case 'C': return 100;
                case 'D': return 500;
                case 'M': return 1000;
                default: return 0;
            }
        }   
    }
    
  • 相关阅读:
    Java数组的使用
    Java的栈堆以及数组两种不同类型的定义
    Java数组声明的创建
    JAVA递归
    Java可变参数
    Java方法(类--------对象--------方法)
    html块元素和内联元素的区别
    HTML基础介绍
    CSS网页美化元素属性介绍
    ArrayList类的remove(Object o)方法简述
  • 原文地址:https://www.cnblogs.com/samhx/p/LeetCode-0013.html
Copyright © 2011-2022 走看看