具体分析见iPad
class Solution {
public:
int clumsy(int N) {
if (N == 1) return 1;
if (N == 2) return 2;
if (N == 3) return 6;
if (N == 4) return 7;
if (N % 4 == 0) return N + 1;
if (N % 4 == 1) return N + 2;
if (N % 4 == 2) return N + 2;
else return N - 1;
}
};
逆波兰表达式的思路,用栈来计算。
class Solution {
public:
int clumsy(int N) {
stack<int> stk; //用栈来计算
stk.push(N -- ); //这个N也代表每一次做乘除运算的结果!!!
while (N) //按照乘除加减的顺序遍历直到N为0
{
if (N) stk.top() *= N -- ; //每一步都要判断当前N是否为0,且计算后N自减1
if (N) stk.top() /= N -- ; //乘法和除法直接用栈顶元素计算
if (N) stk.push(N -- ); //加法就push当前的N
if (N) stk.push( - N -- ); //减法就push当前的-N !!!!
}
int res = 0;
while (stk.size()) //累加栈中元素可得结果
{
res += stk.top();
stk.pop();
}
return res;
}
};
作者:我要出去乱说
链接:https://www.acwing.com/solution/content/42654/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。