zoukankan      html  css  js  c++  java
  • 【LeetCode】将罗马数字转换成10进制数

    Roman to Integer

    Given a roman numeral, convert it to an integer.

    首先介绍罗马数字

    罗马数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。按照下面的规则可以表示任意正整数。

    重复数次:一个罗马数字重复几次,就表示这个数的几倍。

    右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。
    在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。

    • 重写: III(3) XX(20) CC(200)

    • 左减: IX(9) XL(40) CD(400)

    • 右加: VII(7) XI(11) LX(60)

    • 综合前三种方法:XLV(L-X+V,45) LXII(L+X+I+I,62)

    若在数字上方加一横线,表示增大1000倍。
    XIX (19000)

    import java.util.HashMap;
    
    public class Solution {
    public static int romanToInt(String s) {
    	if (s == null || s.length() == 0)
    		return 0;
    	int len = s.length();
    	HashMap<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);
    	int result = map.get(s.charAt(len - 1));
    	int pivot = result;
    	for (int i = len - 2; i >= 0; i--) {
    		int curr = map.get(s.charAt(i));
    		if (curr >= pivot) {
    			result += curr;
    		} else {
    			result -= curr;
    		}
    		pivot = curr;
    	}
    	return result;
       }
     }
    

    从后到后,curr为当前所指的字母,pivot跟随着curr,用于比较,当后面一个数字小于等于curr时,则右加。否则左减。

    Android 小女子
  • 相关阅读:
    消息推送之百度云推送Android集成与用法
    编程算法
    leetcode_Jump Game
    使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果
    Django 介绍、安装配置、基本使用、Django 用户注冊样例
    windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志
    Flex布局 Flexbox属性具体解释
    php 在同一个表单中加入和改动
    Leetcode:remove_element
    java_oop_关键字
  • 原文地址:https://www.cnblogs.com/six-moon/p/4614650.html
Copyright © 2011-2022 走看看