二、 分式化简(LCP2)
生活随笔
收集整理的這篇文章主要介紹了
二、 分式化简(LCP2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
有一個同學在學習分式。他需要將一個連分數化成最簡分數,你能幫助他嗎?
連分數是形如上圖的分式。在本題中,所有系數都是大于等于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)。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/deep-dark-fraction
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
emm比賽的時候將一個長度的給忘記了,死活通過不了,后面才知道
將長度只有1的單獨拿出來進行討論即可。
class Solution {public static long gcb(long a, long b) {if (b == 0) {return a;}return gcb(b, a % b);}public int[] fraction(int[] cont) {int[] result = new int[2];if(cont.length == 1){return new int[]{cont[0],1};}result[0] = 1;result[1] = cont[cont.length - 1];for (int i = cont.length - 2; i > 0; i--) {long fenzi = result[1] * cont[i] + result[0];long fenmu = result[1];long gongyueshu = gcb(Math.max(fenzi,fenmu),Math.min(fenzi,fenmu));System.out.println(gongyueshu);result[0] = (int) (fenmu / gongyueshu);result[1] = (int) (fenzi / gongyueshu);}long fenzi = result[1] * cont[0] + result[0];long fenmu = result[1];long gongyueshu = gcb(Math.max(fenzi,fenmu),Math.min(fenzi,fenmu));result[1] = (int) (fenmu / gongyueshu);result[0] = (int) (fenzi / gongyueshu);return result;} }總結
以上是生活随笔為你收集整理的二、 分式化简(LCP2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Boot Option中没有USB启动选
- 下一篇: 华硕主板错误代码