zoukankan      html  css  js  c++  java
  • 罗马数字转整数 · Roman to Integer

    13. Roman to Integer

    [抄题]:

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    1. 没有想到罗马字是逆序的情况
    2. 没有想到要先用toCharArray()方法把字符串拆成一个字符串数组

    [一句话思路]:

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. toInt函数要用。否则不能直接给字母比大小
    2. 不是void类型的函数就要返回默认值,return 0

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    toInt函数要用。否则不能直接给字母比大小

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    直接背英文对应的数字就行了

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    public class Solution {
        /*
         * @param s: Roman representation
         * @return: an integer
         */
        public int romanToInt(String s) {
            char[] sc = new char[s.length()];
            
            sc = s.toCharArray();
            int ans = toInt(sc[0]);
            for (int i = 1; i < s.length(); i++) {
                ans += toInt(sc[i]);
                if (toInt(sc[i - 1]) < toInt(sc[i])) {
                    ans -= 2 * toInt(sc[i - 1]);
                }
            }
            return ans;
        }
        
        //toInt
        private int toInt (char s) {
            switch(s) {
                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;
            }
            return 0;
        }
    }
    View Code

     整数转罗马字

    [抄题]:

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    觉得可能有很多种分解方法:应该数位分离,把千百十位分别挑出来,就只有一种了

    [一句话思路]:

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 把不同的罗马字拼起来也是写+号

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    1. 记住罗马字符数组的顺序是M C X I即可
    2. String M[] = {"", "M", "MM", "MMM"};写法不同 String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};

    [复杂度]:Time complexity: O() Space complexity: O()

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    273. Integer to English Words 差不多,小于20的数单独列出来即可

     [代码风格] :

    public class Solution {
        /**
         * @param n: The integer
         * @return: Roman representation
         */
        public String intToRoman(int n) {
            String M[] = {"", "M", "MM", "MMM"};
            String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
            String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};//XL
            String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
            
            return M[(n / 1000) % 10] + C[(n / 100) % 10] + X[(n / 10) % 10] + I[n % 10];
        }
    }
    View Code
  • 相关阅读:
    ISO9126 软件质量模型
    java 15.String
    java 14. ArrayList常用方法
    java 13. 方法重载构造方法块this用法
    linux ssh连接心跳检查断开连接
    关于递归,我有几句话想说
    pytest 报错 ImportError: cannot import name 'main'
    递归回溯剪枝之斐波那契数列
    appium-doctor诊断信息不完整
    数据驱动,关键字驱动,混合驱动简单模型
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8448799.html
Copyright © 2011-2022 走看看