從零開始刷力扣(五十二) 592 分數加減運算

2021-10-13 10:04:00 字數 1910 閱讀 7304

題目描述:

給定乙個表示分數加減運算表示式的字串,你需要返回乙個字串形式的計算結果。 這個結果應該是不可約分的分數,即最簡分數。 如果最終結果是乙個整數,例如 2,你需要將它轉換成分數形式,其分母為 1。所以在上述例子中, 2 應該被轉換為 2/1。

說明:

輸入和輸出字串只包含'0''9'的數字,以及'/','+''-'

輸入和輸出分數格式均為±分子/分母。如果輸入的第乙個分數或者輸出的分數是正數,則'+'會被省略掉。

輸入只包含合法的最簡分數,每個分數的分子分母的範圍是  [1,10]。 如果分母是1,意味著這個分數實際上是乙個整數

輸入的分數個數範圍是 [1,10]。

最終結果的分子與分母保證是 32 位整數範圍內的有效整數。

示例 1:

輸入:"-1/2+1/2"

輸出: "0/1"

示例 2:

輸入:"-1/2+1/2+1/3"

輸出: "1/3"

示例 3:

輸入:"1/3-1/2"

輸出: "-1/6"

示例 4:

輸入:"5/3+1/3"

輸出: "2/1"

思路:1、把字串按'+'號拆分成分數陣列,因為考慮到有'-'號的存在,所以需要先把不是字串首位的'-'號替換成'+-';然後再拆分;

2、將拆分後的字串再按'/'拆分,將分子分母分別放入乙個陣列中;

3、找到所有分母的最小公倍數,然後通分,取的同分母後的分子的和,

4、化簡分子的和/最小公倍數的結果,需要找到最大公約數;因為可能不存在最大公約數,所以不可以從2開始找最大公約是,而是應該從較大的那個數開始往小的數找,如果沒有最大公約數的話就都除以1

**實現:

/**

* @param expression

* @return

*/var fractionaddition = function (expression) );

const multiple = getmultiple(denominators);

let membersum = 0;//分子之和

for (let i = 0, len = members.length; i < len; i++)

if (membersum === 0) /1` }

const divisor = getdivisor(membersum, multiple);

return `$/$`;

};// 找分母的最小公倍數

function getmultiple(arr)

return result;

}// 找分子分母的最大公約數

function getdivisor(member, denominator)

return result;

}

執行結果:

從零開始刷力扣(十七) 598 範圍求和 II

題目描述 給定乙個初始元素全部為0,大小為 m n 的矩陣m以及在m上的一系列更新操作。操作用二維陣列表示,其中的每個操作用乙個含有兩個正整數 a 和 b 的陣列表示,含義是將所有符合 0 i a 以及 0 j b 的元素 m i j 的值都增加 1。在執行給定的一系列操作後,你需要返回矩陣中含有最...

從零開始刷力扣(九十七) 71 簡化路徑

給你乙個字串path,表示指向某一檔案或目錄的 unix 風格絕對路徑 以 開頭 請你將其轉化為更加簡潔的規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。任意多個連續的斜槓 即,都被視為單個斜槓...

從零開始刷力扣(五) 645 錯誤的集合

題目描述 集合s包含從1到n的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複 給定乙個陣列nums代表了集合s發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回。示例1 輸...