返回介绍

solution / 0200-0299 / 0254.Factor Combinations / README_EN

发布于 2024-06-17 01:04:02 字数 3323 浏览 0 评论 0 收藏 0

254. Factor Combinations

中文文档

Description

Numbers can be regarded as the product of their factors.

  • For example, 8 = 2 x 2 x 2 = 2 x 4.

Given an integer n, return _all possible combinations of its factors_. You may return the answer in any order.

Note that the factors should be in the range [2, n - 1].

 

Example 1:

Input: n = 1
Output: []

Example 2:

Input: n = 12
Output: [[2,6],[3,4],[2,2,3]]

Example 3:

Input: n = 37
Output: []

 

Constraints:

  • 1 <= n <= 107

Solutions

Solution 1

class Solution:
  def getFactors(self, n: int) -> List[List[int]]:
    def dfs(n, i):
      if t:
        ans.append(t + [n])
      j = i
      while j * j <= n:
        if n % j == 0:
          t.append(j)
          dfs(n // j, j)
          t.pop()
        j += 1

    t = []
    ans = []
    dfs(n, 2)
    return ans
class Solution {
  private List<Integer> t = new ArrayList<>();
  private List<List<Integer>> ans = new ArrayList<>();

  public List<List<Integer>> getFactors(int n) {
    dfs(n, 2);
    return ans;
  }

  private void dfs(int n, int i) {
    if (!t.isEmpty()) {
      List<Integer> cp = new ArrayList<>(t);
      cp.add(n);
      ans.add(cp);
    }
    for (int j = i; j <= n / j; ++j) {
      if (n % j == 0) {
        t.add(j);
        dfs(n / j, j);
        t.remove(t.size() - 1);
      }
    }
  }
}
class Solution {
public:
  vector<vector<int>> getFactors(int n) {
    vector<int> t;
    vector<vector<int>> ans;
    function<void(int, int)> dfs = [&](int n, int i) {
      if (t.size()) {
        vector<int> cp = t;
        cp.emplace_back(n);
        ans.emplace_back(cp);
      }
      for (int j = i; j <= n / j; ++j) {
        if (n % j == 0) {
          t.emplace_back(j);
          dfs(n / j, j);
          t.pop_back();
        }
      }
    };
    dfs(n, 2);
    return ans;
  }
};
func getFactors(n int) [][]int {
  t := []int{}
  ans := [][]int{}
  var dfs func(n, i int)
  dfs = func(n, i int) {
    if len(t) > 0 {
      ans = append(ans, append(slices.Clone(t), n))
    }
    for j := i; j <= n/j; j++ {
      if n%j == 0 {
        t = append(t, j)
        dfs(n/j, j)
        t = t[:len(t)-1]
      }
    }
  }
  dfs(n, 2)
  return ans
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文