1.LCR 192. 把字符串转换成整数 (atoi)
这题难度不大,我这里采取遍历跳过空格的方式,我先展示出我的代码,然后慢慢讲解:
class Solution {
public:int myAtoi(string str) {if (str.empty()) return 0;int length=str.size();int i=0;int symbol=1;int sum=0;while(i<length && str[i]==' '){++i;}if(i<length && str[i]=='+'||str[i]=='-'){if(str[i]=='-')symbol=-1;++i;} while(i<length && isdigit(str[i])){int a=str[i]-'0';if(sum>(INT_MAX-a)/10){if(symbol==1)return INT_MAX;elsereturn INT_MIN;}sum=sum*10+a;++i;}return sum*symbol;}
};
首先我们先排除特殊情况,判断这个string是否为空
下面我们对我们所需要的一些数据进行初始化
length是string的长度
i是遍历的位置
symbol是正负号,1为正号,-1为负号。
sum为最后遍历出的结果计算的和。
做这道题我们首先要理清楚思路,
有以下四种情况需要考虑:
- 首部空格: 忽略之即可;
- 符号位: 三种情况,即 ''+++'' , ''−-−'' , ''无符号" ;用一个变量保存符号位,返回前判断正负;
- 非数字字符: 遇到首个非数字的字符时,直接返回;
- 数字字符:
- 字符转数字: “此数字的 ASCII 码” 与 '0' 相减即可;
- 数字拼接: 若从左向右遍历数字,设当前位字符为 c ,当前位数字为 x ,数字结果为 sum ,则数字拼接公式为:
x=c-'0'
sum=sum*10+x。
用例的示意图(可能不大准确):
我们先遍历排除开头空格,然后记录符号
接下来我们要记录数字,这里我采用一个自带的函数
判断此时读入的是否为数字,是数字则读入
注意:我们要判断是否超过了int的最大值或最小值,而且要保证自己的int类型不超过int的最大值或最小值
因此,这里我把等式左边的操作移到了等式右边。
如果超出了最值,我们接下来通过symbol的值来判断是最大值还是最小值,然后返回相应结果。
如果读完了所有的数,都没有超出最值,那么我们直接调用上面我们写的公式返回
2.415. 字符串相加
这题明显比上面一道题简单,老规矩,先上代码
class Solution {
public:string addStrings(string num1, string num2) {int i = num1.length() - 1, j = num2.length() - 1, add = 0;string ans = "";while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int result = x + y + add;ans.push_back('0' + result % 10);add = result / 10;i -= 1;j -= 1;}reverse(ans.begin(), ans.end());return ans;}
};
首先我们先求出最后一位的下标(string中数的最后一位就是下标最后一位)
同时我们一块定义好我们的进位值,因为我们进行的是10进制计算。大于10要进1,因为一开始,没有进位,所以add=0
我们再创建一个新的string用来存放计算结果:
我们先把string是的数从字符类型转换成数字类型,然后计算(记得加上进位值)
然后我们把它尾插入我们创建的新的string中(这里我选择采用尾插,但也可以用头插(但是头插的时间复杂度更高,因为每次头插都要移动位置))
然后我们调整下标和进位值
最后我们调用reverse函数,翻转一下顺序
3.387. 字符串中的第一个唯一字符
这题难度也不大,我们之后可以用哈希表来解决,这里我选择采用计数数组来解决这个问题
class Solution {
public:int firstUniqChar(string s) {int count[26] = {0};for(auto ch : s){count[ch-'a']++;}for(int i = 0; i < s.size(); i++){if(count[s[i]-'a'] == 1){return i;}}return -1;}
};
把字符串遍历使对应数组++,然后再次遍历数组输出唯一字符.