From 4b5520d210c7af4d95344f400f6df787005c9787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=B8=E7=94=B1?= Date: Wed, 10 Aug 2022 17:53:42 +0800 Subject: [PATCH] =?UTF-8?q?640.=E6=B1=82=E8=A7=A3=E6=96=B9=E7=A8=8B=20?= =?UTF-8?q?=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JavaScript/{q0604.js => q0640.js} | 8 +------- TypeScript/{q0604.ts => q0640.ts} | 8 +------- c_sharp/my_leetcode/Solution.cs | 7 +------ cpp/CMakeLists.txt | 2 ++ cpp/src/Solution.h | 25 ++++++++++++++++++++++--- java/src/com/iqiaoxu/code/Solution.java | 8 +------- python/Solution.py | 6 ++---- rust/src/implements/q0640.rs | 4 +--- 8 files changed, 31 insertions(+), 37 deletions(-) rename JavaScript/{q0604.js => q0640.js} (87%) rename TypeScript/{q0604.ts => q0640.ts} (86%) diff --git a/JavaScript/q0604.js b/JavaScript/q0640.js similarity index 87% rename from JavaScript/q0604.js rename to JavaScript/q0640.js index 78e6a3f..be6f1b3 100644 --- a/JavaScript/q0604.js +++ b/JavaScript/q0640.js @@ -26,13 +26,7 @@ const solveEquation = function (equation) { } } b += sign * left * c; - if (a === 0 && b === 0) { - return "Infinite solutions"; - } else if (a === 0) { - return "No solution"; - } else { - return "x=" + -b / a; - } + return a === 0 ? b === 0 ? "Infinite solutions" : "No solution" : "x=" + -b / a; }; console.assert(solveEquation("x+5-3+x=6+x-2") === "x=2"); diff --git a/TypeScript/q0604.ts b/TypeScript/q0640.ts similarity index 86% rename from TypeScript/q0604.ts rename to TypeScript/q0640.ts index 73185c6..446306f 100644 --- a/TypeScript/q0604.ts +++ b/TypeScript/q0640.ts @@ -20,13 +20,7 @@ function solveEquation(equation: string): string { } } b += sign * left * c; - if (a === 0 && b === 0) { - return "Infinite solutions"; - } else if (a === 0) { - return "No solution"; - } else { - return "x=" + -b / a; - } + return a === 0 ? b === 0 ? "Infinite solutions" : "No solution" : "x=" + -b / a; } console.assert(solveEquation("x+5-3+x=6+x-2") === "x=2"); diff --git a/c_sharp/my_leetcode/Solution.cs b/c_sharp/my_leetcode/Solution.cs index f7acd8a..8f8cf1d 100644 --- a/c_sharp/my_leetcode/Solution.cs +++ b/c_sharp/my_leetcode/Solution.cs @@ -56,12 +56,7 @@ namespace my_leetcode } b += sign * left * c; - return a switch - { - 0 when b == 0 => "Infinite solutions", - 0 => "No solution", - _ => "x=" + -b / a - }; + return a == 0 ? b == 0 ? "Infinite solutions" : "No solution" : "x=" + -b / a; } } } diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 31d375b..f693f1e 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 3.16) +set(CMAKE_CXX_STANDARD 17) + project(my_leetcode) include_directories(src) diff --git a/cpp/src/Solution.h b/cpp/src/Solution.h index 25ead77..cdd9505 100644 --- a/cpp/src/Solution.h +++ b/cpp/src/Solution.h @@ -149,8 +149,8 @@ public: * @return 解 * @see 原题链接 */ - string solveEquation(const string& equation) { - int a = 0, b = 0, c = 0, sign = 1, left = 1; + static string solveEquation(const string& equation) { + /*int a = 0, b = 0, c = 0, sign = 1, left = 1; bool hasC = false; for(char z : equation) { switch (z) { @@ -178,7 +178,26 @@ public: return "No solution"; } else { return "x=" + std::to_string(-b / a); - } + }*/ + if (struct Status { + int a = 0, b = 0, c = 0, sign = 1, left = 1, hasC = false; + } s = std::accumulate(equation.begin(), equation.end(), Status{}, [](Status s, char z) { + switch (z) { + case 'x': + return Status{s.a + (s.hasC ? s.sign * s.left * s.c : s.sign * s.left), s.b, 0, s.sign, s.left, false}; + case '+': + return Status{s.a, s.b + s.sign * s.left * s.c, 0, 1, s.left, false}; + case '-': + return Status{s.a, s.b + s.sign * s.left * s.c, 0, -1, s.left, false}; + case '=': + return Status{s.a, s.b + s.sign * s.left * s.c, 0, 1, -1, false}; + default: + return Status{s.a, s.b, s.c * 10 + z - '0', s.sign, s.left, true}; + } + }); s.a) + return "x=" + std::to_string(-(s.b + s.sign * s.left * s.c) / s.a); + else + return s.b + s.sign * s.left * s.c ? "No solution" : "Infinite solutions"; } }; diff --git a/java/src/com/iqiaoxu/code/Solution.java b/java/src/com/iqiaoxu/code/Solution.java index 40bff3a..a968794 100644 --- a/java/src/com/iqiaoxu/code/Solution.java +++ b/java/src/com/iqiaoxu/code/Solution.java @@ -127,12 +127,6 @@ public class Solution { } } b += sign * left * c; - if (a == 0 && b == 0) { - return "Infinite solutions"; - } else if (a == 0) { - return "No solution"; - } else { - return "x=" + -b / a; - } + return a == 0 ? b == 0 ? "Infinite solutions" : "No solution" : "x=" + -b / a; } } diff --git a/python/Solution.py b/python/Solution.py index 2ae8a39..befbad0 100644 --- a/python/Solution.py +++ b/python/Solution.py @@ -104,7 +104,5 @@ class Solution: case '=': b, c, sign, left, has_c = b + sign * left * c, 0, 1, -1, False case _: c, has_c = c * 10 + int(z), True b += sign * left * c - match (a, b): - case (0, 0): return "Infinite solutions" - case (0, _): return "No solution" - case _: return f"x={-b // a}" + return f"x={-b // a}" if a != 0 else "Infinite solutions" if b == 0 else "Infinite solutions" + diff --git a/rust/src/implements/q0640.rs b/rust/src/implements/q0640.rs index e670009..17cc30a 100644 --- a/rust/src/implements/q0640.rs +++ b/rust/src/implements/q0640.rs @@ -80,9 +80,7 @@ impl Solution { _ => (a, b, c * 10 + (z - b'0') as i32, sign, left, true) }) { (a, b, c, sign, left, _) => match (a, b + sign * left * c) { - (0, 0) => "Infinite solutions".to_owned(), - (0, _) => "No solution".to_owned(), - (_, b) => format!("x={}", -b / a) + (a, b) => if a == 0 { if b == 0 { "Infinite solutions".to_owned() } else { "No solution".to_owned() } } else { format!("x={}", -b / a) } } } }