首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不明白为什么我的Java代码不是以9的形式读取IX,而是以59的形式读取LIX

我不明白为什么我的Java代码不是以9的形式读取IX,而是以59的形式读取LIX
EN

Stack Overflow用户
提问于 2022-09-11 19:32:50
回答 2查看 70关注 0票数 -1

我正在尝试创建一些代码来读取罗马数字,并将它们转换为整数。我拥有的问题是9s和4s。如果9或4在一个数字内(即LIV是54,LXI是59),我就能读到它,但它本身(IV和IX)只读6和11。下面是我的代码:

代码语言:javascript
复制
public static void RomantoInt(String s) {
    HashMap<Character, Integer> RomanNums = new HashMap<>();
    int count = 0;

    RomanNums.put('I', 1);
    RomanNums.put('V', 5);
    RomanNums.put('X', 10);
    RomanNums.put('L', 50);
    RomanNums.put('C', 100);
    RomanNums.put('D', 500);
    RomanNums.put('M', 1000);


    LinkedList<Character> UserInput = new LinkedList<>();

    //Adds Each numeral to the Array
    for (int i = 0; i < s.length(); i++) {
        char userint = s.charAt(i);
        UserInput.add(userint);
    }

    //loop through the array backwards and adds up the count.
           for(int j =UserInput.toArray().length -1; j> -1 ; j--) {
               int grab = RomanNums.get(UserInput.get(j));
               count += grab;

   // Checks for 4s and 9s.

               if(grab == RomanNums.get('X') && (j - 1) == RomanNums.get('I')) {
                   count -= 2;
               }
    }
    System.out.println(count);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-11 19:38:52

j - 1 --字符串中的一个位置--与罗马数字的值进行比较似乎没有任何意义。

确切地说,只有当罗马字母“i”是第二个字符时,它才会起作用。

你真正想要测试的是(j-1)位置上的字符是否是'I‘。

正确的表述应该是

代码语言:javascript
复制
if (grab == RomanNums.get('X') &&
    j > 0 &&
    UserInput.get(j-1) == 'I') ...
票数 2
EN

Stack Overflow用户

发布于 2022-09-11 22:49:21

这是我对leetcode的解决方案:https://leetcode.com/problems/roman-to-integer/

您对反向读取输入有正确的想法,一个循环应该足够完成工作。

你所需要做的就是在你需要减去罗马数字的情况下解释,你可以通过跟踪前一个罗马数字来进行比较。

例如,当输入字符串为:"IX“时

我们在第一次迭代中从'X‘开始,因为前面的迭代等于'?’我们只需添加10并将其设置为'X‘。现在,当我们试图在下一次迭代中总结'I‘时,我们会注意到它是'X’,而不是将1加到运行的和中,我们应该减去1,总数应该是9。

代码语言:javascript
复制
public int romanToInt(String s) {
        int sum = 0;
        char prev = '?';
        
        for(int i = s.length()-1;i >= 0;i--)    {
            
            switch(s.charAt(i))    {
                case 'I'    : sum += prev == 'V' || prev == 'X' ? -1 : 1;
                    break;
                case 'V'    : sum += 5;
                    break;
                case 'X'    : sum += prev == 'L' || prev == 'C' ? -10 : 10;
                    break;
                case 'L'    : sum += 50;
                    break;
                case 'C'    : sum += prev == 'D' || prev == 'M' ? -100 : 100;
                    break;
                case 'D'    : sum += 500;
                    break;
                case 'M'    : sum += 1000;
                    break;
                default     : 
                    break;
            }
            prev = s.charAt(i);
        }
        return sum;        
    }
代码语言:javascript
复制
Time complexity is O(n) - Iterated the length of the input string
Space complexity is O(1) - No additional data structure was needed
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73682137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档