zoukankan      html  css  js  c++  java
  • 乘风破浪:LeetCode真题_012_Integer to Roman

    乘风破浪:LeetCode真题_012_Integer to Roman

    一、前言

        经过了前面的思维训练,我们在某些方面有了一定的提高,但是对于实际的问题,要在短时间内得到答案,还是需要我们多多的练习和思考,从而提升自己的质疑能力,思考能力和编程能力。

    二、Integer to Roman

    2.1 问题理解

    2.2 问题分析和解决

        通过分析我们可以知道,这是单位的换算问题,因此我们需要定义好相应的单位,然后通过取余运算,取整运算不断地进行下去,从而得到对应的单位,然后进行组合。因为有值域限制,我们能够写出所有的单位。

    public class Solution {
        /**
         * <pre>
         * Given an integer, convert it to a roman numeral.
         *
         * Input is guaranteed to be within the range from 1 to 3999.
         *
         * 罗马数字的表示:
         * 个位数举例
         * (I, 1)  (II, 2)  (III, 3)  (IV, 4)  (V, 5)  (VI, 6)  (VII, 7)  (VIII, 8)  (IX, 9)
         *
         * 十位数举例
         * (X, 10)  (XI, 11)  (XII, 12)  (XIII, 13)  (XIV, 14)  (XV, 15)  (XVI, 16)
         * (XVII, 17)  (XVIII, 18)  (XIX, 19)  (XX, 20)  (XXI, 21)  (XXII, 22)
         * (XXIX, 29)  (XXX, 30)  (XXXIV, 34)  (XXXV, 35)  (XXXIX, 39)  (XL, 40)
         * (L, 50)  (LI, 51)  (LV, 55)  (LX, 60)  (LXV, 65)  (LXXX, 80)  (XC, 90)
         * (XCIII, 93)  (XCV, 95)  (XCVIII, 98)  (XCIX, 99)
         *
         * 百位数举例
         * (C, 100)  (CC, 200)  (CCC, 300)  (CD, 400)  (D, 500)  (DC, 600)  (DCC, 700)
         * (DCCC, 800)  (CM, 900)  (CMXCIX, 999)
         *
         * 千位数举例
         * (M, 1000)  (MC, 1100)  (MCD, 1400)  (MD, 1500)  (MDC, 1600)  (MDCLXVI, 1666)
         * (MDCCCLXXXVIII, 1888)  (MDCCCXCIX, 1899)  (MCM, 1900)  (MCMLXXVI, 1976)
         * (MCMLXXXIV, 1984)  (MCMXC, 1990)  (MM, 2000)  (MMMCMXCIX, 3999)
         *
         * 题目大意:
         * 输入一个数字,将它转成一个罗马数字,输入的数字在[1, 3999]之间
         *
         * </pre>
         *
         * @param num
         * @return
         */
        public String intToRoman(int num) {
    
            String[][] base = new String[][]{
                    {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}, // 个位的表示
                    {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}, // 十位的表示
                    {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}, // 百倍的表示
                    {"M", "MM", "MMM", "", "", "", "", "", ""}}; // 千位的表示
    
    
            String result = "";
    
            // 每除一次就示处理后一个数位(从小到大)
            // i记录当前处理的是第几个数位
            for (int i = 0; num != 0; num /= 10, i++) {
                // 如果不为0,说明这个数位上有值,要进行相加操作
                if (num % 10 != 0) {
                    // 拼接结果
                    result = base[i][num % 10 - 1] + result;
                }
            }
    
            return result;
        }
    }
    

    三、总结

        我们可能被题目所迷惑,导致自己没有解决办法,可是如果将这些东西写出来,一些都是那样的简单了。

  • 相关阅读:
    inotify+rsync做实时同步
    JAVA序列化和反序列化
    初识iBatis
    《Spring in action》之高级装配
    《Spring in action》之装配Bean
    原根
    数论知识
    线性(欧拉)筛
    Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E DNA Evolution
    Fibonacci
  • 原文地址:https://www.cnblogs.com/zyrblog/p/10213371.html
Copyright © 2011-2022 走看看