- 有效的括号
这道题已经解出
但是最后的最后 我还是理解错了题意
但还是使用栈 来解决
class Solution {
public:
bool isValid(string s) {
int l=s.size();
if(l==0){return true;}
stack<char>insort;
int inverse;
for(int i=0;i<l;i++){
if(s[i]=='('||s[i]=='['||s[i]=='{'){
insort.push(s[i]);
}
else{
inverse=i;
break;
}
}
int l_stack=insort.size();
string inver_s;
for(int i=0;i<l_stack;i++){
inver_s.push_back(insort.top());
insort.pop();
}
if(l_stack!=l-inverse){return false;}
for(int i=0;i<l_stack;i++){
if((inver_s[i]=='('&&s[inverse+i]==')')
||(inver_s[i]=='['&&s[inverse+i]==']')||
(inver_s[i]=='{'&&s[inverse+i]=='}')){
continue;
}
else{return false;}
}
return true;
}
};
然后 正确答案请参考下面
class Solution {
public:
bool isValid(string s) {
stack<char> symbols;
for(int i = 0; i < s.size(); i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
symbols.push(s[i]);
else{
if(symbols.size() == 0)
return false;
char match;
if(s[i] == ')')
match = '(';
else if(s[i] == ']')
match = '[';
else if(s[i] == '}')
match = '{';
char c = symbols.top();
symbols.pop();
if(c != match)
return false;
}
}
if(symbols.size() != 0)
return false;
return true;
}
};
2.整数反转
注意1:这个主要是需要进行递归思想
通过不断取余来更新值 而且通过乘10来进行移位
注意2:同时注意 要避免溢出的condition
class Solution {
public:
int reverse(int x) {
int fanz=0;
int c;
int flag=x<0?-1:1;
while(x&&x<INT_MAX){
c=fanz;
if((flag==-1&& INT_MIN/10>fanz)||
(flag==1 &&INT_MAX/10<fanz)){
return 0;
}
fanz=fanz*10+x%10;
x=x/10;
}
return fanz;
}
};