Formatted question description: https://leetcode.ca/all/1447.html

1447. Simplified Fractions (Medium)

Given an integer n, return a list of all simplified fractions between 0 and 1 (exclusive) such that the denominator is less-than-or-equal-to n. The fractions can be in any order.

 

Example 1:

Input: n = 2
Output: ["1/2"]
Explanation: "1/2" is the only unique fraction with a denominator less-than-or-equal-to 2.

Example 2:

Input: n = 3
Output: ["1/2","1/3","2/3"]

Example 3:

Input: n = 4
Output: ["1/2","1/3","1/4","2/3","3/4"]
Explanation: "2/4" is not a simplified fraction because it can be simplified to "1/2".

Example 4:

Input: n = 1
Output: []

 

Constraints:

  • 1 <= n <= 100

Related Topics:
Math

Solution 1.

// OJ: https://leetcode.com/problems/simplified-fractions/

// Time: O(N^2)
// Space: O(1)
class Solution {
    int gcd(int a, int b) {
        return b ? gcd(b, a % b) : a;
    }
public:
    vector<string> simplifiedFractions(int n) {
        vector<string> ans;
        for (int i = 2; i <= n; ++i) {
            for (int j = 1; j < i; ++j) {
                if (gcd(i, j) != 1) continue;
                ans.push_back(to_string(j) + "/" + to_string(i));
            }
        }
        return ans;
    }
};

Java

class Solution {
    public List<String> simplifiedFractions(int n) {
        List<String> fractions = new ArrayList<String>();
        if (n == 1)
            return fractions;
        fractions.add("1/2");
        for (int denominator = 3; denominator <= n; denominator++) {
            int maxNumerator = denominator / 2;
            for (int numerator = 1; numerator <= maxNumerator; numerator++) {
                if (gcd(numerator, denominator) == 1) {
                    fractions.add(numerator + "/" + denominator);
                    fractions.add((denominator - numerator) + "/" + denominator);
                }
            }
        }
        return fractions;
    }

    public int gcd(int num1, int num2) {
        if (num1 == 1)
            return 1;
        while (num1 != 0 && num2 != 0) {
            num2 %= num1;
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }
        return num2;
    }
}

All Problems

All Solutions