当前位置: 首页 > ds >正文

LeetCode 刷题【12. 整数转罗马数字】

12. 整数转罗马数字

自己做

解:逐步相减

class Solution {
public:string intToRoman(int num) {string s = "";while(num / 1000 > 0){     //能否减1000s += 'M';num -= 1000;}while(num / 900 > 0){     //能否减900s += "CM";num -= 900;}while(num / 500 > 0){     //能否减500s += 'D';num -= 500;}while(num / 400 > 0){     //能否减400s += "CD";num -= 400;}while(num / 100 > 0){     //能否减100s += 'C';num -= 100;}while(num / 90 > 0){     //能否减90s += "XC";num -= 90;}while(num / 50 > 0){     //能否减50s += 'L';num -= 50;}while(num / 40 > 0){     //能否减40s += "XL";num -= 40;}while(num / 10 > 0){     //能否减10s += 'X';num -= 10;}while(num / 9 > 0){     //能否减9s += "IX";num -= 9;}while(num / 5 > 0){     //能否减5s += 'V';num -= 5;}while(num / 4 > 0){     //能否减4s += "IV";num -= 4;}while(num > 0){         //剩余的s += "I";num--;}return s;}
};

看题解

看思路自己敲

class Solution {
public:string intToRoman(int num) {string s = "";vector<vector<string>> v(10, vector<string>(4));            //建立二维数组,存储罗马数字//最初提供的罗马数字v[1][0] = "M";v[1][1] = "C";v[1][2] = "X";v[1][3] = "I";v[5][1] = "D";v[5][2] = "L";v[5][3] = "V";//建立罗马数字的组合v[2][0] = "MM";v[2][1] = "CC";v[2][2] = "XX";v[2][3] = "II";v[3][0] = "MMM";v[3][1] = "CCC";v[3][2] = "XXX";v[3][3] = "III";v[4][1] = "CD";v[4][2] = "XL";v[4][3] = "IV";v[6][1] = "DC";v[6][2] = "LX";v[6][3] = "VI";v[7][1] = "DCC";v[7][2] = "LXX";v[7][3] = "VII";v[8][1] = "DCCC";v[8][2] = "LXXX";v[8][3] = "VIII";v[9][1] = "CM";v[9][2] = "XC";v[9][3] = "IX";if (num / 1000 > 0) {           //千位s += v[num / 1000][0];num %= 1000;}if (num / 100 > 0) {            //百位s += v[num / 100][1];num %= 100;}if (num / 10 > 0) {             //十位s += v[num / 10][2];num %= 10;}if (num > 0) {                  //个位s += v[num][3];}return s;}
};

显然浪费时间在输入建立表上了

这次看了官方代码,再来

class Solution {
public:string intToRoman(int num) {const string thousands[] = {"", "M", "MM", "MMM"};const string hundreds[]  = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};const string tens[]      = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};const string ones[]      = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};return thousands[num / 1000] + hundreds[num / 100 % 10] + tens[num / 10 % 10] + ones[num % 10];}
};

还是慢了。。。

官方代码

const string thousands[] = {"", "M", "MM", "MMM"};
const string hundreds[]  = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const string tens[]      = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const string ones[]      = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};class Solution {
public:string intToRoman(int num) {return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];}
};

今日总结

玩数学吗,有意思

http://www.xdnf.cn/news/16303.html

相关文章:

  • Spring Bean生命周期七步曲:定义、实例化、初始化、使用、销毁
  • Android Studio历史版本快速下载(二次修改记录)
  • 面试150 搜索二维矩阵
  • Android集成Google Map
  • 黑马头条项目详解
  • springboot项目如何写出优雅的service?
  • AI时代,我的编程工作搭子
  • TreeMap一致性哈希环设计与实现 —— 高可用的数据分布引擎
  • The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(六)
  • 解决http的web服务中与https服务交互的问题
  • RuoYi-Vue 项目 Docker 全流程部署实战教程
  • PS一键图片智能添加噪点脚本 GrainLab for Photoshop安装与使用介绍
  • 5种最佳方法将iPhone语音备忘录传输到Mac
  • esp32 挂载mpu6050实现加速度计
  • Apache POI 实战应用:企业级文档处理解决方案
  • 编写程序,打印图案,要求该图案的行数由用户输入
  • Hadoop磁盘I/O瓶颈的监控与优化:从iostat指标到JBOD vs RAID的深度解析
  • 海思平台移植 CAN 通信全攻略:从硬件到应用
  • 独家|百度副总裁尚国斌即将离职,此前统筹百度地图;行业搜索及智能体业务总经理谢天转岗IDG
  • 最新免费使用Claude Code指南(Windows macOS/Linux)
  • 【Spring Cloud Gateway 实战系列】终极篇:演进方向与未来架构
  • Visual Studio 2010-.Net Framework 4.0-DevExpress安装
  • ADS数据流实现隐藏文件
  • 【AJAX】XMLHttpRequest、Promise 与 axios的关系
  • 动手学深度学习2.0-李沐Pytorch版
  • Windows 10 停服:个人与企业的 “系统选择题”
  • 小程序生命周期及页面操作执行过程详解
  • Lua(数组)
  • day13 flash
  • 根据字符串数组的顺序重新排序 List顺序