栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode

leetcode
  • 题目
    • 全排列
    • 电话号码的字母组合
  • 周赛

题目 全排列

题目链接

class Solution {
 public:
  void backtrack(const vector& nums, vector>& res, vector& output, vector& mark, int first, int len) {
    if (first == len) {
      res.emplace_back(output);
      return;
    }

    for (int i = 0; i < len; i++) {
      if (!mark[i]) {
        mark[i] = true;
        output.emplace_back(nums[i]);
        backtrack(nums, res, output, mark, first + 1, len);
        mark[i] = false;
        output.pop_back();
      }
    }
  }
  vector> permute(vector& nums) {      // 借助标记数组,使用回溯法找到所有全排列
    int n = static_cast(nums.size());
    vector> res;
    vector mark(n, false);
    vector output;
    backtrack(nums, res, output, mark, 0, n);       
    return res;
  }
};

官方题解

class Solution {
 public:
  void backtrack(vector& nums, vector>& res, int first, int len) {
    if (first == len) {
      res.emplace_back(nums);
      return;
    }

    for (int i = first; i < len; i++) {  // [0,first−1] 是已填过的数的集合,[first,n−1] 是待填的数的集合
      swap(nums[i], nums[first]);
      backtrack(nums, res, first + 1, len);
      swap(nums[i], nums[first]);
    }
  }
  vector> permute(vector& nums) {  // 不使用标记数组
    int n = static_cast(nums.size());
    vector> res;
    backtrack(nums, res, 0, n);
    return res;
  }
};
电话号码的字母组合

题目链接

class Solution {
 public:
  void traverse(const vector& source, string combine, int start, int end, vector& res) {
    if (start == end) {  // 到达末尾,加入结果集
      res.emplace_back(combine);
      return;
    }
    for (auto letter : source[start]) {  // 依次使用各个字母
      traverse(source, combine + letter, start + 1, end, res);
    }
  }
  vector letterCombinations(string digits) {
    if (digits.empty()) {
      return {};
    }
    static vector dig2str = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};  // 数字字母映射
    vector strs;
    int idx;
    for (auto digit : digits) {  // 将数字转换成字母集合
      idx = static_cast(digit - '2');
      strs.emplace_back(dig2str[idx]);
    }
    vector res;
    int digit_len = static_cast(digits.size());
    traverse(strs, "", 0, digit_len, res);  // 遍历
    return res;
  }
};
周赛
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号