|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zltzlt 于 2020-1-15 20:44 编辑
今天的题目:
将一个连分数化成最简分数。
连分数是形如上图的分式。在本题中,所有系数都是大于等于 0 的整数。
输入的 cont 代表连分数的系数(cont[0] 代表上图的 a0,以此类推)。
返回一个长度为 2 的数组 [n, m],使得连分数的值等于 n / m,且 n、m 最大公约数为 1。
示例 1:
输入:cont = [3, 2, 0, 2]
输出:[13, 4]
解释:原连分数等价于 3 + (1 / (2 + (1 / (0 + 1 / 2))))。注意 [26, 8]、[-13, -4] 都不是正确答案。 示例 2:
输入:cont = [0, 0, 3]
输出:[3, 1]
解释:如果答案是整数,令分母为 1 即可。
 欢迎大家一起答题! 
感觉解法都大同小异呢。
- def solve(cont:'list of int >= 0')->'[n,m]':
- res = [0,1]
- for each in cont[:0:-1]:
- res[0],res[1] = res[1],each*res[1]+res[0]
- else:
- res[0],res[1] = cont[0]*res[1]+res[0],res[1]
- def gcd(a,b):
- while a!=b and a and b:
- a,b = b%a,a
- return a or b
- n=gcd(res[0],res[1])
- return res
- if __name__ == '__main__':
- print('示例1 输出:',solve([3, 2, 0, 2]))
- print('示例2 输出:',solve([0, 0, 3]))
复制代码
|
|