贪心算法概念:
贪心算法又称贪婪算法。是指在对问题求解时总是作出在当前看来是最好的做法。不从总体最优解出发来考虑,也就是说它做出来的仅是某种意义上的最优解。
数字转罗马字母
/**
* 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();
}
两种写法大同小异,贪心算法还有一个使用的地方就是找零钱