三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

LeetCode 12 整数转罗马数字 - 贪心从大到小减

LeetCode 12 整数转罗马数字 - 贪心从大到小减

LeetCode 12 整数转罗马数字,用贪心思想:能减大的先减大的。


🟡 整数转罗马数字

整数转成罗马数字。值对应:I=1, V=5, X=10, L=50, C=100, D=500, M=1000。
特殊规则:4→IV, 9→IX, 40→XL, 90→XC, 400→CD, 900→CM。


就是换零钱——把 1994 拆成 1000+900+90+4 = M + CM + XC + IV。把面值和符号从大到小排好,能减就减,换个符号,继续减。

publicStringintToRoman(intnum){int[]values={1000,900,500,400,100,90,50,40,10,9,5,4,1};String[]symbols={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};StringBuildersb=newStringBuilder();for(inti=0;i<values.length;i++){while(num>=values[i]){num-=values[i];sb.append(symbols[i]);}}returnsb.toString();}

为什么贪心一定对?因为罗马数字的规则保证了每个值对应的符号是独立的、不会出现"用了大的导致小的凑不出来"。这跟人民币的 100、50、20 不一样——罗马数字没有"用了 1 个 C 就等于锁死了 10 个 X"这种约束,它们之间就是纯线性加法。


这道题你踩过什么坑?或者你用别的语言实现过吗?评论区聊聊,回头复习也方便翻。

← 返回列表