592. Fraction Addition and Subtraction
2017-06-21 22:14
316 查看
http://bookshadow.com/weblog/2017/05/21/leetcode-fraction-addition-and-subtraction/
求分数加减法算式的值,结果化为最简分数。
注意:
输入字符串只包含0~9,+-/。输出亦然
每个分数之前包含±号,若第一个分数为正数,省去+
输入只包含有效的最简分数,分子分母范围[1, 10]。若分母为1,表示该分数实际上是一个整数。
分数的个数范围[1, 10]
分子分母的结果在32位带符号整数范围之内
def gcd(a, b):
if a < b: a, b = b, a
while b:
a, b = b, a % b
return a
def lcm(a, b):
return a * b / gcd(a, b)
part = ''
fractions = []
for c in expression:
if c in '+-':
if part: fractions.append(part)
part = ''
part += c
if part: fractions.append(part)
hi = [int(e.split('/')[0]) for e in fractions]
lo = [int(e.split('/')[1]) for e in fractions]
LO = reduce(lcm, lo)
HI = sum(h * LO / l for h, l in zip(hi, lo))
GCD = abs(gcd(LO, HI))
return '%s/%s' % (HI / GCD, LO / GCD)
题目大意:
求分数加减法算式的值,结果化为最简分数。注意:
输入字符串只包含0~9,+-/。输出亦然
每个分数之前包含±号,若第一个分数为正数,省去+
输入只包含有效的最简分数,分子分母范围[1, 10]。若分母为1,表示该分数实际上是一个整数。
分数的个数范围[1, 10]
分子分母的结果在32位带符号整数范围之内
解题思路:
求分母的最小公倍数,记为LO 将分子乘以 LO / 分母 对分子求和,记为HI 求LO和HI的最大公约数的绝对值,记为GCD 结果的分子分母分别为HI / GCD, LO / GCD
def gcd(a, b):
if a < b: a, b = b, a
while b:
a, b = b, a % b
return a
def lcm(a, b):
return a * b / gcd(a, b)
part = ''
fractions = []
for c in expression:
if c in '+-':
if part: fractions.append(part)
part = ''
part += c
if part: fractions.append(part)
hi = [int(e.split('/')[0]) for e in fractions]
lo = [int(e.split('/')[1]) for e in fractions]
LO = reduce(lcm, lo)
HI = sum(h * LO / l for h, l in zip(hi, lo))
GCD = abs(gcd(LO, HI))
return '%s/%s' % (HI / GCD, LO / GCD)
相关文章推荐
- leetcode 592. Fraction Addition and Subtraction
- 592. Fraction Addition and Subtraction
- [leetcode]592. Fraction Addition and Subtraction
- [Leetcode] 592. Fraction Addition and Subtraction 解题报告
- leetcode-592. Fraction Addition and Subtraction
- Math-592-Fraction Addition and Subtraction
- Fraction Addition and Subtraction
- 592. Fraction Addition and Subtraction
- Fraction Addition and Subtraction
- [LeetCode] Fraction Addition and Subtraction 分数加减法
- 算法分析与设计第十八周:592. Fraction Addition and Subtraction
- 592. Fraction Addition and Subtraction
- 592. Fraction Addition and Subtraction
- algorithm 1.4.22 Binary search with only addition and subtraction
- AtCoder Regular Contest 066 E - Addition and Subtraction Hard 动态规划
- [arc066e]Addition and Subtraction Hard
- leetcode 592. Fraction Addition and Subtraction 分数加法+C++stringstream的一个很好的示例
- AtCoder Regular Contest 066 E - Addition and Subtraction Hard
- Binary search with addition and subtraction
- 大数据加减(Big data addition and subtraction)