Re: [閒聊] 每日leetcode

看板Marginalman作者 (死肥肥社管)時間1年前 (2024/08/23 12:56), 編輯推噓2(200)
留言2則, 2人參與, 1年前最新討論串757/1548 (看更多)
※ 引述《oin1104 (是oin的說)》之銘言: : 題目: : 給你字串 : -1/2+1/2 : 3/6-1/3+2/5-10/2 : 要你算出結果 : 思路: : 機掰 : 超麻煩 : 直接做一個class num : 然後用operator處理加減 : 生成num就暴力的一個一個字放進去 : 姆咪 我先parse 每個分數字串 跟 +- 再把分數轉成一個struct做+- 做+-就是先通分加減完再約分 最後再轉回字串 class Solution { struct frac { int numerator; int denominator; frac(string s){ auto pos = s.find('/'); numerator = stoi(s.substr(0, pos)); denominator = stoi(s.substr(pos+1, string::npos)); }; void exec(const frac&& d, char op){ int _lcm = lcm(denominator, d.denominator); int num_d = d.numerator * (_lcm/d.denominator); if(op == '+') numerator = (numerator * (_lcm/denominator)) + num_d ; else numerator = (numerator * (_lcm/denominator)) - num_d; denominator = _lcm; if(numerator % denominator == 0){ numerator = numerator / denominator; denominator = 1; } int _gcd = gcd(numerator, denominator); if(_gcd != 1){ numerator /= _gcd; denominator /= _gcd; } } inline string to_str() { return to_string(numerator) + string(1, '/') + to_string(denominator); } }; public: string fractionAddition(string expression) { vector<string> nums(1000, ""), ops; int i = 0; bool isnumerator=true, isdenominator=false; for(auto c: expression){ if(isdenominator && (c == '+' || c == '-') ) { ops.push_back(string(1,c)); isnumerator = true; isdenominator = false; i++; } else if(isnumerator || isdenominator){ if(c == '/') { isnumerator = false; isdenominator = true; } nums[i] += c; } } frac ans(nums[0]); for(int i = 0; i < ops.size(); ++i){ ans.exec(frac(nums[i+1]), ops[i][0]); } return ans.to_str(); } }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.98.33 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1724388968.A.353.html

08/23 12:57, 1年前 , 1F
我差不多想法 但還沒解完
08/23 12:57, 1F

08/23 13:00, 1年前 , 2F
我約分那邊是用2~100直接約 因為他有限制大小
08/23 13:00, 2F
文章代碼(AID): #1co1PeDJ (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1co1PeDJ (Marginalman)