当前位置: 首页 > news >正文

产品展示型网站模板长春网站网站推广公司设计

产品展示型网站模板,长春网站网站推广公司设计,河西做网站公司,培训网站开发流程目录 1.字母大小写全排列1.题目链接2.算法原理详解3.代码实现 2.优美的排列1.题目链接2.算法原理详解3.代码实现 3.N 皇后1.题目链接2.算法原理详解3.代码实现 1.字母大小写全排列 1.题目链接 字母大小写全排列 2.算法原理详解 本题逻辑与子集大致相同 思路一:每…

目录

  • 1.字母大小写全排列
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.优美的排列
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.N 皇后
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.字母大小写全排列

1.题目链接

  • 字母大小写全排列

2.算法原理详解

  • 本题逻辑与子集大致相同
    • 思路一:每次盯着一个字符,变或是不变
      • 全局变量
        • string path
        • vector<string> ret
      • DFS()设计
        • 函数头void DFS(string, pos)
          • pos:下一层递归要选的元素
        • 函数体
          • 字母可能变/不变,数字一定不需要变
        • 递归出口pos == nums.size()
      • 回溯:变完函数返回时需要回溯
        请添加图片描述

3.代码实现

class Solution 
{string path;vector<string> ret;
public:vector<string> letterCasePermutation(string s) {DFS(s, 0);return ret;}void DFS(string& s, int pos){if(pos == s.size()){ret.push_back(path);return;}char ch = s[pos];// 不改变path += ch;DFS(s, pos + 1);path.pop_back(); // 回溯,恢复现场// 改变if(ch < '0' || ch > '9'){ch = Change(ch);path += ch;DFS(s, pos + 1);path.pop_back(); // 回溯,恢复现场}}char Change(char ch){if(ch >= 'a' && ch <= 'z'){ch -= 32;}else{ch += 32;}return ch;}
};

2.优美的排列

1.题目链接

  • 优美的排列

2.算法原理详解

  • 思路:对每个位置挨个尝试填入数字
    • 全局变量
      • int ret
      • vector<bool> check -> 剪枝
    • DFS()设计void DFS(pos, n)
    • 剪枝
      • 之前用过的数字不再使用
      • 不符合情况的不填入
    • 回溯:每层递归返回时回溯
      请添加图片描述

3.代码实现

class Solution 
{int ret = 0;vector<bool> check;
public:int countArrangement(int n) {check.resize(n + 1, false);DFS(1, n);return ret;}void DFS(int pos, int n){if(pos == n + 1){ret++;return;}for(int i = 1; i <= n; i++){if(!check[i] && (i % pos == 0 || pos % i == 0)){check[i] = true;DFS(pos + 1, n);check[i] = false; // 回溯,恢复现场}}}
};

3.N 皇后

1.题目链接

  • N 皇后

2.算法原理详解

  • 本题可以学习二维数组判断行列、主副对角线是否放有数据

  • 思路:在每一行找合适的列放置皇后,即每次枚举都是枚举一行
    - DFS()设计:void DFS(row)

    • 决策树
      请添加图片描述
  • 如何剪枝?-> 当前这个位置,能否放上皇后?

    • 无脑四个循环判断行列、主副对角线 -> ×
    • 类似哈希表的策略,需要一定数学理解
      • 不需要剪枝,收递归限制
      • bool checkCol[n] -> 判断
        • 对应下标表示每列是否放置过皇后
      • bool checkDig1[2 * n] -> 主对角线
        • y = x + b -> y - x = b -> b可以唯一标识一个对角线
        • y - x + n = b + n -> 两边加上一个固有偏移量防止下标出现负数
      • bool checkDig2[2 * n] -> 副对角线
        • y = -x + b -> y + x = b -> b可以唯一标识一个对角线
        • 副对角线不需要固定偏移量,因为副对角线的纵截距都大于0
          请添加图片描述

3.代码实现

class Solution 
{int _n = 0;vector<bool> checkCol;vector<bool> checkDig1;vector<bool> checkDig2;vector<vector<string>> ret;vector<string> path;
public:vector<vector<string>> solveNQueens(int n) {_n = n;checkCol.resize(n, false);checkDig1.resize(2 * n, false);checkDig2.resize(2 * n, false);path.resize(n, string(n, '.'));DFS(0);return ret;}void DFS(int row){// 递归出口if(row == _n){ret.push_back(path);return;}// 对于每一行,枚举每一列for(int i = 0; i < _n; i++){// 剪枝if(!checkCol[i] && !checkDig1[row - i + _n] && !checkDig2[row + i]){checkCol[i] = checkDig1[row - i + _n] = checkDig2[row + i] = true;path[row][i] = 'Q';DFS(row + 1);checkCol[i] = checkDig1[row - i + _n] = checkDig2[row + i] = false; // 回溯path[row][i] = '.';}}}
};
http://www.yayakq.cn/news/348020/

相关文章:

  • 山东天齐建设集团网站深圳代理记账费用
  • 网站建设大概需要多少钱公司注册查询是在哪查
  • 网络公司网站样本火车头wordpress发布模块制作
  • 汕尾英文网站建设网站服务器容量
  • 遵义网站开发公司电话设计图片手绘图片
  • 中壹建设工程有限公司官方网站app制作开发的流程
  • 长葛哪里有做网站的wordpress多用户图库
  • 购买网站源码注意事项重庆长寿网站设计公司哪家专业
  • 苏州做网站的公司哪家最好深圳大型网站开发
  • 电子商务网站建设与管理实训心得网站改标题
  • 郑州建站系统费用wordpress屏蔽索引
  • 无人机网站建设关键词有哪几种
  • 有关网站建设文章集团有限公司
  • 网站域名优势wordpress用php哪个版本
  • 新乡个人网站建设网站开发 微信收款
  • 想学Wordpress建站国内最新新闻事件今天
  • 网站降权查下空间 网站都有 肿么做网站
  • 中国建设银行网站易方达消费一般购物网站项目
  • 乐山网站seo郑州网官网
  • wordpress网站是什么深圳龙华租房
  • 丽水做企业网站的公司深圳商城网站制作
  • 西安企业网站wordpress插件关闭更新
  • seo快速建站东莞网站建设优化排名
  • 谷歌优化招聘seo深圳网络推广
  • 个人网站怎么建立流程网站建设项目投资测算
  • 南和企业做网站哈尔滨建筑工程
  • 车网站建设策划项目计划书模板word
  • 中国展厅设计公司排名网站打开速度慢 如何优化
  • 网站北京备案快吗做网站哪个公司可以做
  • 大型网站建设视频西安关键词优化平台