热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode整数与字符的转换问题

整数转罗马数字给定一个整数,将其转为罗马数字。输入确保在1到3999的范围内。示例:输入:3,输出:“III”。字符数值:I1ÿ

整数转罗马数字

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
示例 :输入: 3,输出: “III”。
字符 数值:I 1,V 5,X 10,L 50,C 100,D 500,M 1000

class Solution {
public:string intToRoman(int num) {int values[]&#61;{1000,900,500,400,100,90,50,40,10,9,5,4,1};string reps[]&#61;{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};string res;for(int i&#61;0; i<13; i&#43;&#43;){while(num>&#61;values[i]){num -&#61; values[i];res &#43;&#61; reps[i];}}return res;}
};



罗马数字转整数

给定一个罗马数字&#xff0c;将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 : 输入: “III”,输出: 3

class Solution {
public:int romanToInt(string s) {int values[] &#61; { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };string reps[] &#61; { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };int res&#61;0;int index &#61; 0;int i &#61; 0;while( i <13&&index};



整数转换英文表示

将非负整数转换为其对应的英文表示。可以保证给定输入小于 2^31 - 1 。
示例&#xff1a;输入: 12345, 输出: “Twelve Thousand Three Hundred Forty Five”。

class Solution {
public:vector keys &#61; {1000000000,1000000,1000,100,90,80,70,60,50,40,30,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};vector values &#61; {"Billion","Million","Thousand","Hundred","Ninety","Eighty","Seventy","Sixty","Fifty","Forty","Thirty","Twenty","Nineteen","Eighteen","Seventeen","Sixteen","Fifteen","Fourteen","Thirteen","Twelve","Eleven","Ten","Nine","Eight","Seven","Six","Five","Four","Three","Two","One","Zero"};string numberToWords(int num) {for (int i &#61; 0; i <32; &#43;&#43;i) {int key &#61; keys[i];if (num >&#61; key) {if (num >&#61; 100) {return numberToWords(num / key) &#43; " " &#43; values[i] &#43; (num % key > 0 ? " " &#43; numberToWords(num % key) : "");} else if (num >&#61; 20) {return values[i] &#43; (num % 10 > 0 ? " " &#43; numberToWords(num % 10) : "");} else {return values[i];}}}return "";}
};



字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。

示例 1: 输入: num1 &#61; “2”, num2 &#61; “3”. 输出: “6”

class Solution {
public:string multiply(string num1, string num2) {if (num1 &#61;&#61; "0" || num2 &#61;&#61; "0") return "0";int n1 &#61; num1.length() - 1;int n2 &#61; num2.length() - 1;vector<int> mul(n1 &#43; n2 &#43; 2);
//编译器默认初始化为0 n位数和m位数相乘最多为m&#43;n位数。
//乘数 num1 位数为 MM&#xff0c;被乘数 num2 位数为 NN&#xff0c; num1 x num2 结果 res 最大总位数为 M&#43;N
//num1[i] x num2[j] 的结果为 tmp(位数为两位&#xff0c;"0x","xy"的形式)&#xff0c;其第一位位于 res[i&#43;j]&#xff0c;第二位位于 res[i&#43;j&#43;1]。
//11*12 &#61;132 1和2相乘的结果为2的下标加1的下标&#xff0c;假设1的下标代表2乘了几个10&#xff08;0下标开始的话&#xff09;for (int i &#61; n1; i >&#61; 0; i--)for (int j &#61; n2; j >&#61; 0; j--) { //11 12int bitmul &#61; (num1[i] - &#39;0&#39;)*(num2[j] - &#39;0&#39;);//两个位上的数的乘积bitmul &#43;&#61; mul[i &#43; j &#43; 1];//先加低位&#xff0c;判断是否有新的进位mul[i &#43; j] &#43;&#61; bitmul / 10;//高位mul[i &#43; j &#43; 1] &#61; bitmul % 10;//低位}//去掉前导0int i &#61; 0;while (i < n1 &#43; n2 &#43; 1 && mul[i] &#61;&#61; 0)i&#43;&#43;;int index &#61; i;string multi&#61;string(n1&#43;n2&#43;2-i,&#39;0&#39;);for (; i < n1 &#43; n2 &#43; 2; i&#43;&#43;)multi[i-index]&#61;(mul[i]&#43;&#39;0&#39;);//string类型的append函数return multi;}
};



把字符串转换成整数

思路

1.功能测试

正数/复数/0

2.边界值测试

最大的正整数/最小的负整数&#xff08;数据上下溢出&#xff09;

class Solution {
public:/*全局变量*/enum {kValid,kInvalid}; // 枚举元素&#xff08;kValid&#61;0&#xff0c;kInvalid&#61;1&#xff09;int g_nStatus &#61; kValid; // 标记是否是非法输入/*功能函数*/int StrToInt(string str){g_nStatus &#61; kInvalid; // 初始标记为非法输入long long num &#61; 0; // 存储结果const char* cstr &#61; str.c_str();// 指向字符数组的指针// 判断是否是空指针和空字符串""if( (cstr !&#61; NULL) && (*cstr !&#61; &#39;\0&#39;) ){// 处理符号位int minus &#61; 1;if(*cstr &#61;&#61; &#39;-&#39;){minus &#61; -1;cstr&#43;&#43;;}else if(*cstr &#61;&#61; &#39;&#43;&#39;){minus &#61; 1;cstr&#43;&#43;;}// 处理其余位while(*cstr !&#61; &#39;\0&#39;){if(*cstr > &#39;0&#39; && *cstr < &#39;9&#39;){// string转int类型g_nStatus &#61; kValid; // 标记为合法输入num &#61; num*10 &#43; (*cstr -&#39;0&#39;); // string转换为int类型cstr&#43;&#43;;// 数据上下溢出if( ((minus>0) && (num > 0x7FFFFFFF)) ||((minus<0) && (num > 0x80000000)) ){g_nStatus &#61; kInvalid; // 如果溢出&#xff0c;则标记为非法输入num &#61; 0;break;}}else{g_nStatus &#61; kInvalid;num &#61; 0;break;}}if(g_nStatus &#61;&#61; kValid)num &#61; num * minus;}cout<<(int)num<<endl;return (int)num;}
};


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
aarongwang56_972
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有