# 程序员进阶之算法练习（四十九）LeetCode

### 正文

#### 题目1.两数之和

```class Solution {
unordered_map<int, int> mp;
public:
vector<int> twoSum(vector<int>& nums, int target) {
mp.clear();
vector<int> ans;

for (int i = 0; i < nums.size(); ++i) {
if (mp[target - nums[i]]) {
ans.push_back(i);
ans.push_back(mp[target - nums[i]] - 1);
break;
}
mp[nums[i]] = i + 1;
}
return  ans;
}
}leetcode;```

#### 2.整数反转

```class Solution {
public:
int reverse(int x) {
lld ret = 0, flag = x < 0 ? -1 : 1;
lld tmp = abs(x), sz = 1;
while (tmp) {
ret = tmp % 10 + ret * 10;
tmp /= 10;
}
lld intLeft = -(1LL << 31), intRight = (1LL << 31) - 1;
if (ret < intLeft || ret > intRight) {
ret = 0;
}
return (int)ret * flag;
}
}leetcode;```

#### 3.字符串转换整数 (atoi)

```class Solution {
public:
int myAtoi(string str) {
long long ret = 0;
int flag = 0; // 前置符号， 0表示还没放过， 1 是正数，-1是负数
bool hasConvert = false;
for (int i = 0; i < str.length(); ++i) {
if (str[i] == '-' || str[i] == '+') {
if (flag) {
return flag * ret;
}
flag = str[i] == '-' ? -1 : 1;
hasConvert = true;
}
else if (str[i] >= '0' && str[i] <= '9') {
if (!flag) flag = 1;
hasConvert = true;
ret = ret * 10 + str[i] - '0';
if (flag * ret < -(1LL << 31)) {
return -(1LL << 31);
}
if (flag * ret > (1LL << 31) - 1) {
return (1LL << 31) - 1;
}
}
else if (!hasConvert && str[i] == ' ') {
continue;
}
else {
return flag * ret;
}
}
return flag * ret;
}
}lc;```

#### 4.回文数

```class Solution {
public:
bool isPalindrome(int x) {
char s[20];
sprintf(s, "%d", x);
int end = strlen(s) - 1, st = 0;
while (st < end) {
if (s[st] != s[end]) {
return false;;
}
++st;
--end;
}
return true;
}
}leetcode;```

#### 5.最长公共前缀

```class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string ret;
while (true && strs.size()) {
for (int i = 0; i < strs.size(); ++i) {
if (strs[i].size() < ret.length() + 1) {
return ret;
}
if (i > 0 && strs[i][ret.length()] != strs[0][ret.length()]) {
return ret;
}
}
ret.push_back(strs[0][ret.length()]);
}
return ret;
}
}leetcode;```

0 条评论

• ### 程序员进阶之算法练习（四十八）LeetCode

题目链接 题目大意： 给出两个非空的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。 ...

• ### 程序员进阶之算法练习（十九）

前言 这周很忙，但是越忙的时候反而越喜欢抽空做算法题。 欢迎关注algorithm文集。 这次A、B、C都是很合适的面试题。 正文 A. Memory ...

• ### 程序员进阶之算法练习（四十四）

题目链接 题目大意： 给出整数x，求两个整数a和b，满足： ???(?,?)+???(?,?)=? . GCD是最大公约数； LCM是最小公约数；

• ### 程序员进阶之算法练习（十四）

前言 坚持做算法练习对开发的好处是抽象能力变强，拿到一个需求能很快对其进行抽象，然后再用学过的设计模式相关知识进行整理，最后用代码实现。 最大的好处在于：对...

• ### 程序员进阶之算法练习（三十四）LeetCode专场

LeetCode上的题目是大公司面试常见的算法题，今天的目标是拿下5道算法题： 1、2、3题都是Medium的难度，大概是头条的面试题水准； 4、5题是Hard...

• ### 程序员进阶之算法练习（二十四）

前言 已经有三个月未更新算法文章，大厂工作环境是步步紧逼的，使得所有的人越来越忙碌。余下的学习时间，要用于技术预研、知识面开阔、底层原理理解等等，慢慢算法只能占...

• ### 程序员进阶之算法练习（四十二）

题目链接 题目大意： n个学生参加测试，一共有m道题，每道题的答案可能是(A, B, C, D , E)中的一个； m道题分别有?1,?2,…,??，共m...

• ### 程序员进阶之算法练习（四十七）

题目链接 题目大意： 给出一个整数1~n的排列。 接下来有m个询问，每个询问包括 l, r, x。 (l <= x <= r) [l, r]区间内的数字...