leetcode LCP 02. 分式化简
生活随笔
收集整理的這篇文章主要介紹了
leetcode LCP 02. 分式化简
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目】LCP 02. 分式化簡
有一個同學在學習分式。他需要將一個連分數化成最簡分數,你能幫助他嗎?
連分數是形如上圖的分式。在本題中,所有系數都是大于等于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)。
【解題思路1】倒序遍歷
class Solution {public int[] fraction(int[] cont) {int denominator = cont[cont.length-1], numerator = 1;int addend = 1;for(int i = cont.length - 2; i >= 0; i--){numerator = denominator; //翻轉后分子變分母denominator = cont[i] * denominator + addend; //求出通分后的分子,反轉后變為分母addend = numerator; //記錄翻轉后的分子以便下一次通分}return new int[]{denominator, numerator};} }【解題思路2】遞歸 - 正序
class Solution {private int[] recursive(int[] count, int index) {if (index == count.length - 1) {return new int[]{count[index], 1};}int[] nextRes = recursive(count, index+1);return new int[]{count[index] * nextRes[0] + nextRes[1], nextRes[0]};}public int[] fraction(int[] cont) {return recursive(cont, 0);} }總結
以上是生活随笔為你收集整理的leetcode LCP 02. 分式化简的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel表Ctrl+v和Ctrl sh
- 下一篇: 反射+自定义属性拼接sql