Leetcode LCP 02. 分式化简
https://leetcode.cn/problems/deep-dark-fraction/description/
有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?
连分数是形如上图的分式。在本题中,所有系数都是大于等于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即可。
限制:
cont[i] >= 0
1 <= cont的长度 <= 10
cont最后一个元素不等于0
答案的n, m的取值都能被32位int整型存下(即不超过2 ^ 31 - 1)。
解答
主要是使用代码 vector模拟分数 使用公倍数模拟分数相加通分
然后使用最大公约数消除分子分母的公约数,比较繁琐 但是没坑
代码如下
class Solution {
public:
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
vector<int> solve(vector<int> a, vector<int> b) {
//模拟分数相加 通分 然后去除分子分母公约数
int abase = a[1]; int bbase = b[1];
a[0] *= bbase; a[1] *= bbase; b[0] *= abase; b[1] *= abase;
a[0] += b[0];
int v = gcd(a[0], a[1]);
while ( v != 1) {
a[0] /= v; a[1] /= v;
v = gcd(a[0], a[1]);
}
return a;
}
vector<int> fraction(vector<int>& cont) {
if (cont.size() == 1) { cont.push_back(1); return cont; }
int a = cont.back(); cont.pop_back();
int b = cont.back(); cont.pop_back();
//第一次需要取出两个数字 通分为相同分母处理
vector<int> ret = solve(vector<int>{b,1}, vector<int>{1, a});
while (!cont.empty()) {
int c = cont.back(); cont.pop_back();
//注意要颠倒分子分母
swap(ret[0], ret[1]);
ret = solve(vector<int>{c, 1}, ret);
}
return ret;
}
};
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2019-12-26 算法问题实战策略 MATCHORDER 贪心
2019-12-26 算法问题实战策略 JUMPGAME 记忆化搜索
2019-12-26 算法问题实战策略 TRIANGLEPATH 动态规划入门题