【Leetcode-13.罗马数字转整数 -14.最长公共前缀】

简介: 【Leetcode-13.罗马数字转整数 -14.最长公共前缀】

Leetcode-13.罗马数字转整数

题目:

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
      I             1
      V             5
      X             10
      L             50
      C             100
      D             500
      M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。

同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

下面看代码和注释:

int romanToInt(char* s) 
      {
          int symbolValues[100];
          symbolValues['I'] = 1;
          symbolValues['V'] = 5;
          symbolValues['X'] = 10;
          symbolValues['L'] = 50;
          symbolValues['C'] = 100;
          symbolValues['D'] = 500;
          symbolValues['M'] = 1000;
          int ans = 0;
          int n = strlen(s);
          for (int i = 0; i < n; ++i)
          {
              int value = symbolValues[s[i]];
              //判断IV和IX等特殊情况,因为这些情况都是V-I和X-I,
              //那么我们就判断,如果当前位的值小于下一位的值,我们就将当前位赋负号,也就是ans减去这个值
              //这里还要保证i当前的位置不能是最后一位,如果是最后一位就直接加进ans了
              if (i < n - 1 && value < symbolValues[s[i + 1]])
              {
                  ans -= value;
              }
              else
              {
                  ans += value;
              }
          }
          return ans;
      }
      int main()
      {
          char* ch = "VII";
          printf("%d\n",romanToInt(ch));
          return 0;
      }

Leetcode-14.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 " ".

我们的思路是一个字符一个字符的比较,当遇到不相等时直接把当前比较的字符改成’\0’,返回这个字符串;下面看代码和注释:

char* longestCommonPrefix(char** strs, int strsSize)
      {
          int i = 0;
          //把strs[0][0],相当于(*strs+0)+0,放在pos,即第一个字符串的第一个元素f放到pos中
          char pos = strs[0][0];
          //当第一个strs[0][i]不为0,即第一个字符串没结束就继续
          while (strs[0][i])
          {
              //标记
              int flag = 0;
              //j遍历strs中除了第一个字符串的其他字符串,i表示比较这个字符串的第i个字符
              for (int j = 1; j < strsSize; j++)
              {
                  //当其中有一个不相等,flag赋1,跳到下面的else中
                  if (strs[j][i] != pos)
                  {
                      flag = 1;
                  }
              }
              //当前strsSize个字符串的前i个都相等,i继续往后走,把下一个字符赋给pos,更新pos
              if (flag == 0)
              {
                  i++;
                  pos = strs[0][i];
              }
              //flag=1,将当前第一个字符串的第i个改成0,i前面的就是表示最长公共前缀
              //然后跳出循环,直接返回第一个字符串
              else
              {
                  strs[0][i] = '\0';
                  break;
              }
          }
          return strs[0];
      }
目录
相关文章
|
2月前
|
存储
LeetCode整数反转
解决LeetCode上的整数反转问题的几种方法,包括错误的方法和优化后的解决方案,以及如何避免反转后的整数超出32位有符号整数范围的问题。
35 1
|
2月前
|
算法
Leetcode第十四题(最长公共前缀)
这篇文章介绍了一种算法,用于在给定的字符串数组中找到最长公共前缀,通过逐字符比较每个字符串的对应位置,一旦发现不匹配立即返回当前已匹配的子串作为公共前缀。
24 0
|
2月前
【LeetCode】整数翻转
【LeetCode】整数翻转
16 1
|
2月前
|
存储 C++
Leetcode第十二题(整数转罗马数字)
LeetCode第12题“整数转罗马数字”的解题方法,包括罗马数字的基本规则和特殊规则,以及如何使用C++实现整数到罗马数字的转换。
16 0
|
2月前
|
C++
Leetcode第十三题(罗马数字转整数)
这篇文章介绍了LeetCode第13题“罗马数字转整数”的解题方法,通过一个C++的类`Solution`中的`romanToInt`函数来实现,该函数使用哈希表和遍历字符串的方法,根据罗马数字的规则将输入的罗马数字字符串转换为对应的整数值。
52 0
|
2月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
18 0
|
4月前
|
算法
LeetCode第14题最长公共前缀
该文章介绍了 LeetCode 第 14 题最长公共前缀的解法,通过取一个字符串作为基准,一列一列字符比较来找出最长公共前缀,时间复杂度为 O(m * n),同时提到也可使用二分查找法,但代码复杂度会上升。
LeetCode第14题最长公共前缀
|
4月前
|
算法
LeetCode第13题目罗马数字转整数
该文章介绍了 LeetCode 第 13 题罗马数字转整数的解法,通过从大到小解析罗马数字,根据罗马数字的特点,按照从大到小的顺序匹配罗马数字和整数的关系,从而解决该问题,同时强调要注意观察题目考查的知识点特征。
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
119 2