Java贪心算法数字转罗马数字

279 阅读1分钟

贪心算法概念:

贪心算法又称贪婪算法。是指在对问题求解时总是作出在当前看来是最好的做法。不从总体最优解出发来考虑,也就是说它做出来的仅是某种意义上的最优解。

数字转罗马字母

/**
 * I(1) V(5) X(10) L(50) C(100) D(500) M(1000)
 *
 * 输入任意一个数字,能够使用对应的罗马字母表示,例如:2=II  6=VI
 * 但是一般4=IV 9=IX  40=XL 90=LC 400=CD 900=CM
 *
 * 贪心算法
 */

public static String intToRoman(int num) {

    String[] letters = {"I", "IV", "V", "IX","X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
    int[] number = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};

    String returnValue = "";
    for (int i = letters.length - 1; i >= 0; i--) {
        if (num <= 0) {
            break;
        }
        int multiple = num / number[i];
        int remainder = num % number[i];
        if (multiple > 0) {
            while (multiple > 0) {
                returnValue += letters[i];
                multiple--;
            }
        }
        num = remainder;

    }
    return returnValue;
}

还有一种写法

public static String intToRoman(int num) {
    StringBuilder result = new StringBuilder();
    int index = 0;
    int[] numbers = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    String[] romans = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    while (index < 13) {
        while (num >= numbers[index]) {
            result.append(romans[index]);
            num -= numbers[index];
        }
        index++;
    }
    return result.toString();
}

两种写法大同小异,贪心算法还有一个使用的地方就是找零钱