zoukankan      html  css  js  c++  java
  • LeetCode之Easy篇 ——(12)Integer to Roman

    Given an integer, convert it to a roman numeral.

    Input is guaranteed to be within the range from 1 to 3999.

    罗马数字:

    基本字符
    I
    V
    X
    L
    C
    D
    M
    相应的阿拉伯数字表示为
    1
    5
    10
    50
    100
    500
    1000

    1、相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;

    2、小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;

    3、小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;

    4、正常使用时、连写的数字重复不得超过三次;

    5、在一个数的上面画一条横线、表示这个数扩大 1000 倍。

    思路:

      首先,用二维数组保存罗马数字的个位、整十、整百、整千(如1000、2000...其他类似)。举例:[0][1]代表“I”,[1][0]代表X,[1][1]代表XX。

      其次,将输入值的各位取出来,再输出对应数组里的罗马字符。举例:若取出来的是百位上的3,则对应数组的[2][2],即是它对应的300。

    Java代码实现:

    public class Solution {
        public String intToRoman(int num) {
            String[][] s = 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"}};
            return s[3][num / 1000 % 10] + s[2][num / 100 % 10] + s[1][num / 10 % 10] + s[0][num % 10];
        }
    }
    
  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/promiseslc/p/8598028.html
Copyright © 2011-2022 走看看