題目描述
題目分析
因為順序一定且沒有括號,所以邏輯很簡單。我們要順序處理的矛盾在于,減號后面會再出現乘法和除法,我們不妨將對乘法和除法用一個臨時值進行計算,計算結束后再合并到值里面,一般來講乘法和除法的處理結果是一個負數,例外是剛開始出現的乘法和除法,我們特殊判斷一下,其他的就順序處理。需要注意的是最后循環結束后我們還要再將臨時量合并到值里面,因為有可能沒有到除法,沒來得及合并。具體可以看代碼,很好理解:
class Solution {
public:int clumsy(int N) {int ans = 0;int now_ans = N;int sign = 0;while (--N > 0) {switch (sign) {case 0:now_ans *= N;break;case 1:now_ans /= N;if (!ans) {ans += now_ans;} else {ans -= now_ans;}now_ans = 0;break;case 2:ans += N;break;case 3:now_ans = N;break;}sign = (sign + 1) % 4;}if (!ans) {ans += now_ans;} else {ans -= now_ans;}return ans;}
};
看到題解還有用數學進行消項最后O(1)O(1)O(1)的解法,那個我覺得在我的能力范圍之外了。
PS
早上起來順手寫了這道題,然后準備寫題解,看到圖靈獎名單發布了,覺得那些人才真正的是計算機科學家,而我們這種只是搬磚,在人家搭建的平臺上做些事罷了。覺得自己這輩子都達不到人家那種高度了,自己現在的水平可能就是人家大一第一個月的水平,智商也不在同一個層次上,然后感傷了一會。看到leetcode上有字節的招聘,說后端只要go的,我對C++的前景又產生了一些憂慮,在網上看到說C++23快要出了,希望C++能有一個更好的發展。不過說回來我連C++11都沒學完呢,我在這里想屁吃。