老肝哥-菜鸟Java的LeetCode历程,第十三题:Roman to Integer,朝远大目标前进!

嘿嘿!各位好你最好的朋友老肝哥照惯例又来了

今天老肝哥心情其实不错
因为自己又坚持一天了,但老肝哥在想
Easy的题目就有四百多题,一天一题484要搞一年?
所以勤奋如老肝哥,当然也要加快脚步跟上各路大神罗

其实以老肝哥的聪明才智,1秒就想好怎麽写了,
但写到後面才想起,例如罗马数字表示4:IV
并不是单纯相加,才赶快上网问Google小姐姊的

13. Roman to Integer

题目描述为下:
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

老肝哥的理解为:就是把罗马数字转换成一般的数字就这样

解答如下:

class Solution {
    public int romanToInt(String s) {
        
        char[] c = s.toCharArray();
        int sum = 0;
        
        if (s.indexOf("IV") != -1) sum -= 2;
        if (s.indexOf("IX") != -1) sum -= 2;
        if (s.indexOf("XL") != -1) sum -= 20;
        if (s.indexOf("XC") != -1) sum -= 20;
        if (s.indexOf("CD") != -1) sum -= 200;
        if (s.indexOf("CM") != -1) sum -= 200;
        
        for(int i = 0;i<=c.length-1;i++) {
        	if (c[i] == 'I') sum += 1;
            if (c[i] == 'V') sum += 5;
            if (c[i] == 'X') sum += 10;
            if (c[i] == 'L') sum += 50;
            if (c[i] == 'C') sum += 100;
            if (c[i] == 'D') sum += 500;
            if (c[i] == 'M') sum += 1000;
        }
        return sum;
        
    }
}

解释如下:

其实这题最重要的应该是找出IV,IX,XL这些条件的规律,
使用s.indexOf("IV") != -1 找出传入字串是否包含需要特殊计算的数字,
如果有呢 则减去相同位数的2 例如: VI vs IV
如果单纯用加法算 V:5 I:1 那就是5+1=6,但还有摆放顺序的位置
若为IV则是 5-1=4 但各位小夥伴有没有发现呢,
如果照这个逻辑下去处理 无论我摆放位置是在前或在後,
只需要判断 如果出现IV这种例子时,-2就会获得答案

剩下的大家都会拉,加一加减一减而已,只要想通上面的逻辑,这题相信大家都是秒解的!


<<:  Day10:串列的循环

>>:  纠正不合规问题并减轻风险, 您最关心的项目为何?

Day20-D3 基础图表:圆饼图

本篇大纲:选择最合适的图表、圆饼图、本次范例的画面与互动效果、pie( ) 与 arc( )、绘制...

[Day18] 刺激! 居家上班之老板v.s.员工偷懒攻防战!

这边要强调一下,我相当珍惜公司给予的居家上班机会, 完全没有想过或做过以下行为,只是以少数人情况举例...

Day13-290. Word Pattern

今日题目:290. Word Pattern(Easy) Given a pattern and a...

D20 第十周 (回忆篇)

这礼拜在弄第九周作业,在 session 的部分花相对多的时间研究,主要是安全议题的关系。 然後也开...

[Day5] 语言模型(二)-N-gram实作

一. 前言 前一天已经说明N-gram的一些计算方式了,这篇会以实作'预测词'来作为N-gram的范...