leetcode 12. 整数转罗马数字

朱雀 2023-07-01 14:00 186阅读 0赞

思路:一开始想用背包来做,后面发现完全没这个必要。

能用的数字只有 {1,4,5,9,10,40,50,90,100,400,500,900,1000}这13个,每次都从后面开始选出一个最大且小于等于当前值的数字即可。然后注意一下dfs的写法即可。

  1. class Solution {
  2. public:
  3. int a[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000};
  4. string intToRoman(int num) {
  5. map<int,string> mp;
  6. mp[1]="I";
  7. mp[5]="V";
  8. mp[4]="IV";
  9. mp[9]="IX";
  10. mp[10]="X";
  11. mp[50]="L";
  12. mp[40]="XL";
  13. mp[100]="C";
  14. mp[90]="XC";
  15. mp[500]="D";
  16. mp[1000]="M";
  17. mp[400]="CD";
  18. mp[900]="CM";
  19. vector<int> vec;
  20. string ans;
  21. dfs(num,vec);
  22. for(auto i:vec)
  23. {
  24. ans+=mp[i];
  25. }
  26. return ans;
  27. }
  28. void dfs(int val,vector<int> &vec)
  29. {
  30. if(val==0) return;
  31. for(int i=12;i>=0;i--)
  32. {
  33. if(val>=a[i])
  34. {
  35. val-=a[i];
  36. vec.push_back(a[i]);
  37. dfs(val,vec);
  38. break;
  39. }
  40. }
  41. }
  42. };

发表评论

表情:
评论列表 (有 0 条评论,186人围观)

还没有评论,来说两句吧...

相关阅读