題目描述:
給定乙個表示分數加減運算表示式的字串,你需要返回乙個字串形式的計算結果。 這個結果應該是不可約分的分數,即最簡分數。 如果最終結果是乙個整數,例如 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 輸...