- 整数反转(#7)
- 反转字符串(#344)
- 有效的括号(#20)
1思路:主要是考虑int溢出的问题。
class Solution {
public:
int reverse(int x) {
long long res = 0;//如果题不让使用long long,这种办法就不行啦
while(x) {
res = res*10 + x%10;
x /= 10;
}
return (res<INT_MIN || res>INT_MAX) ? 0 : res;
}
};
2思路:两个指针分别(i)从头和(j)尾向中间迭代。
class Solution {
public:
void reverseString(vector<char>& s) {
//终止条件是i=j
for(int i=0,j=s.size()-1;i<j;i++,j--){
swap(s[i],s[j]);
}
}
};
3思路:用栈呗,遍历字符串s,碰见’[’ ‘(’ ‘{’,将’]’ ‘)’ '}'入栈,其他情况如果:栈空或者当前字符不等于栈顶元素return false,否则弹出栈顶元素。最后栈空的话说明括号匹配。
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(const auto& c : s){
switch(c){
case '{': stk.push('}'); break;
case '[': stk.push(']'); break;
case '(': stk.push(')'); break;
default:
if(stk.size() == 0 || c != stk.top()) return false;
else stk.pop();//栈里有元素且字符和栈顶元素相同
}
}
return stk.empty();
}
};