ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

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

2026/8/14 1:16:23 拓冰建站 浏览量
LeetCode 12 整数转罗马数字 - 贪心从大到小减 LeetCode 12 整数转罗马数字用贪心思想能减大的先减大的。 整数转罗马数字整数转成罗马数字。值对应I1, V5, X10, L50, C100, D500, M1000。特殊规则4→IV, 9→IX, 40→XL, 90→XC, 400→CD, 900→CM。就是换零钱——把 1994 拆成 1000900904 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};StringBuildersbnewStringBuilder();for(inti0;ivalues.length;i){while(numvalues[i]){num-values[i];sb.append(symbols[i]);}}returnsb.toString();}为什么贪心一定对因为罗马数字的规则保证了每个值对应的符号是独立的、不会出现用了大的导致小的凑不出来。这跟人民币的 100、50、20 不一样——罗马数字没有用了 1 个 C 就等于锁死了 10 个 X这种约束它们之间就是纯线性加法。这道题你踩过什么坑或者你用别的语言实现过吗评论区聊聊回头复习也方便翻。