LeetCode Week4
EX.657
Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.
The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R (Right), L (Left), U (Up) and D (down). The output should be true or false representing whether the robot makes a circle.
Example 1:
Input: "UD" Output: true
Exampel 2:
Input: "LL" Output: false
Solution:
通过两个int标记竖直方向和水平方向的移动即可
class Solution {
public:
bool judgeCircle(string moves) {
int ver = 0, line = 0;
for (int i = 0; i < moves.size(); i++) {
switch(moves[i]) {
case 'U':
ver++;
break;
case 'D':
ver--;
break;
case 'L':
line++;
break;
default:
line--;
}
}
if (ver == 0 && line == 0)
return true;
return false;
}
};
EX.537
Given two strings representing two complex numbers.
You need to return a string representing their multiplication. Note i2 = -1 according to the definition.
Example1:
Input: "1+1i", "1+1i" Output: "0+2i" Explanation: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i, and you need convert it to the form of 0+2i.
Example2:
Input: "1+-1i", "1+-1i" Output: "0+-2i" Explanation: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i, and you need convert it to the form of 0+-2i.
Solution:
只需要提取出每个多项式的两个参数即可
class Solution {
public:
string complexNumberMultiply(string a, string b) {
pair<int, int> av = parse(a);
pair<int, int> bv = parse(b);
int ra = av.first * bv.first - av.second * bv.second;
int rb = av.first * bv.second + av.second * bv.first;
return to_string(ra) + "+" + to_string(rb) + "i";
}
pair<int, int> parse(const string& a) {
int plus = a.find('+');
int i = a.find('i');
int ra = stoi(a.substr(0, plus));
int rb = stoi(a.substr(plus + 1, i - plus));
return {ra, rb};
}
};