【LeetCode_字符串_逻辑分析】13. 罗马数字转整数
创始人
2024-03-26 19:40:19
0

目录

  • 考察点
  • 第一次:2022年12月8日15:24:16
    • 解题思路
      • 代码展示
    • 优秀的解题思路
      • 1. 总结规律
      • 2. 字符串替换

题目描述

13. 罗马数字转整数

考察点

逻辑分析能力

第一次:2022年12月8日15:24:16

解题思路

分析能力有待提高

代码展示

class Solution {public int romanToInt(String s) {int result = 0;int special = 0;// 当前下标int i = 0;// 下标的下一位置int j = 0;// 当前的下标还在字符串里面while (i < s.length()) {// 求出下标的下一位置j = i + 1;// 如果下标的下一个位置 到达 字符串的末尾了if (j == s.length()){// 当前的值 + 当前字符对应的值result += charToNum(s.charAt(i));// 跳出循环break;}// 判断当前下标的字符是否能够与下一个字符 组成特殊情况StringBuilder stringBuilder = new StringBuilder();special = specialCondition(stringBuilder.append(s.charAt(i)).append(s.charAt(j)).toString());// 如果能够组成特殊情况if (special != 0){// 当前的值 + 特殊情况的值result += special;// 下标跳一位i = i + 2;}// 不能够组成特殊情况else {// 当前的值 + 当前字符对应的值result += charToNum(s.charAt(i));// 下标移到下一位i ++;}}return result;}/*** 特殊的规则适用的六种情况** @param s 字符串* @return int 结果*/private int specialCondition(String s) {switch (s) {case "IV": return 4;case "IX": return 9;case "XL": return 40;case "XC": return 90;case "CD": return  400;case "CM": return 900;default: return 0;}}/*** 字符转数字** @param i 字符* @return int 数字*/private int charToNum(char i) {switch (i) {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;}}
}

测试用例

    public static void main(String[] args) {Solution solution = new Solution();System.out.println(solution.romanToInt("MCMXCIV"));}

优秀的解题思路

1. 总结规律

作者:donespeak

链接:https://leetcode.cn/problems/roman-to-integer/solution/yong-shi-9993nei-cun-9873jian-dan-jie-fa-by-donesp/

按照题目的描述,可以总结如下规则:

  1. 罗马数字由 I,V,X,L,C,D,M 构成;
  2. 当小值在大值的左边,则减小值,如 IV=5-1=4;
  3. 当小值在大值的右边,则加小值,如 VI=5+1=6;
  4. 由上可知,右值永远为正,因此最后一位必然为正。

一言蔽之,把一个小值放在大值的左边,就是做减法,否则为加法

在这里插入图片描述

在代码实现上,可以往后看多一位,对比当前位与后一位的大小关系,从而确定当前位是加还是减法。当没有下一位时,做加法即可。

也可保留当前位的值,当遍历到下一位的时,对比保留值与遍历位的大小关系,再确定保留值为加还是减。最后一位做加法即可。

2. 字符串替换

在这个解题思路链接的评论区中看到的。

妙蛙种子给妙趣角开门,妙到家了

class Solution {public int romanToInt(String s) {s = s.replace("IV","a");s = s.replace("IX","b");s = s.replace("XL","c");s = s.replace("XC","d");s = s.replace("CD","e");s = s.replace("CM","f");int res = 0;for (int i = 0; i < s.length(); i++) {res += getValue(s.charAt(i));}return res;}public int getValue(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;case 'a': return 4;case 'b': return 9;case 'c': return 40;case 'd': return 90;case 'e': return 400;case 'f': return 900;}return 0;}
}

相关内容

热门资讯

每周股票复盘:四方光电(688... 截至2025年12月26日收盘,四方光电(688665)报收于49.67元,较上周的47.84元上涨...
黑龙江哈尔滨建立住宅物业管理联... 为全面提升住宅小区精细化管理水平,黑龙江省哈尔滨市印发《哈尔滨市住宅物业管理联席会议制度》,通过构建...
长沙市自动驾驶汽车发展条例 长沙市人民代表大会常务委员会公告 (2025年第16号) 《长沙市自动驾驶汽车发展条例》已经2025...
一次性信用修复政策哪些情况能享... 12月22日,中国人民银行发布《关于实施一次性信用修复政策有关安排的通知》,明确央行征信系统(金融信...
苹果与麦斯莫专利纠纷:法官驳回... 【苹果与麦斯莫血氧监测专利纠纷有新进展,苹果可继续美售更新款智能手表】12月27日消息,美国苹果公司...
河南省举行《河南省优化营商环境... 原标题: 我省举行《河南省优化营商环境条例》新闻发布会 以法治护航民营经济高质量发展(新闻发布厅) ...
六“字”解码《河南省优化营商环... 市场壁垒如何破除? 关键堵点怎样打通? 企业权益如何保障? 中小企业怎样融资? 如何做到无事不扰? ...
中国经济“四稳”政策:激活内生... 【12月28日消息,“四稳”政策助力稳增长】自2025年4月25日中央政治局会议首提“着力稳就业、稳...
这里既有产业基础又有政策支持 应聘者正在有序入场。 招聘单位和应聘者进行供需对接。 香港理工大学珠三角校友会为校友提供信息咨询...
关于《长沙市自动驾驶汽车发展条... 记者:请问《条例》的颁布,对于长沙自动驾驶汽车产业发展将有何助力作用? 市工业和信息化局党组成员、副...