leetcode LCP 02. 分式化简
生活随笔
收集整理的這篇文章主要介紹了
leetcode LCP 02. 分式化简
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目】LCP 02. 分式化簡(jiǎn)
有一個(gè)同學(xué)在學(xué)習(xí)分式。他需要將一個(gè)連分?jǐn)?shù)化成最簡(jiǎn)分?jǐn)?shù),你能幫助他嗎?
連分?jǐn)?shù)是形如上圖的分式。在本題中,所有系數(shù)都是大于等于0的整數(shù)。
輸入的cont代表連分?jǐn)?shù)的系數(shù)(cont[0]代表上圖的a0,以此類推)。返回一個(gè)長(zhǎng)度為2的數(shù)組[n, m],使得連分?jǐn)?shù)的值等于n / m,且n, m最大公約數(shù)為1。
示例 1:
輸入:cont = [3, 2, 0, 2] 輸出:[13, 4] 解釋:原連分?jǐn)?shù)等價(jià)于3 + (1 / (2 + (1 / (0 + 1 / 2))))。注意[26, 8], [-13, -4]都不是正確答案。示例 2:
輸入:cont = [0, 0, 3] 輸出:[3, 1] 解釋:如果答案是整數(shù),令分母為1即可。限制:
cont[i] >= 0
1 <= cont的長(zhǎng)度 <= 10
cont最后一個(gè)元素不等于0
答案的n, m的取值都能被32位int整型存下(即不超過(guò)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; //翻轉(zhuǎn)后分子變分母denominator = cont[i] * denominator + addend; //求出通分后的分子,反轉(zhuǎn)后變?yōu)榉帜?/span>addend = numerator; //記錄翻轉(zhuǎn)后的分子以便下一次通分}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);} }總結(jié)
以上是生活随笔為你收集整理的leetcode LCP 02. 分式化简的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Excel表Ctrl+v和Ctrl sh
- 下一篇: 反射+自定义属性拼接sql