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

设计公司网站制作工程建设领域专项治理工作网站

设计公司网站制作,工程建设领域专项治理工作网站,陕西建设集团韩城公司网站,wordpress彩虹条代码1--全排列(46) 主要思路1: 经典全排列,每次枚举每一位时,重头开始枚举,用一个访问数组记录当前已经被访问过的数字; 这道题不包含重复数字,所以不需要进行树层上的剪枝; …

1--全排列(46)

主要思路1:

        经典全排列,每次枚举每一位时,重头开始枚举,用一个访问数组记录当前已经被访问过的数字;

        这道题不包含重复数字,所以不需要进行树层上的剪枝;

#include <iostream>
#include <vector>class Solution {
public:std::vector<std::vector<int>> permute(std::vector<int>& nums) {if(nums.size() == 0) return res;std::vector<bool> vis(nums.size(), false);std::vector<int> tmp;dfs(nums, vis, tmp);return res;}void dfs(std::vector<int>& nums, std::vector<bool>& vis, std::vector<int> &tmp){if(tmp.size() == nums.size()){res.push_back(tmp);return;}for(int i = 0; i < nums.size(); i++){if(vis[i] == true) continue;tmp.push_back(nums[i]);vis[i] = true;dfs(nums, vis, tmp);// 回溯tmp.pop_back();vis[i] = false;}}
private:std::vector<std::vector<int>> res;
};int main(int argc, char *argv[]){std::vector<int> test = {1,2,3};Solution S1;std::vector<std::vector<int>> res = S1.permute(test);for(auto v : res){for(auto i : v) std::cout << i << " ";std::cout << std::endl;}
}

主要思路2:

        可以利用下一个排列的思想来枚举全排列,首先需要将数组进行从小到大排序,然后不断求解下一个排列,一个下一个排列就是一个新的排列,直到最大的排列为止;

#include <iostream>
#include <vector>
#include <algorithm>class Solution {
public:std::vector<std::vector<int>> permute(std::vector<int>& nums) {if(nums.size() == 0) return res;std::sort(nums.begin(), nums.end()); // 从小到大排列res.push_back(nums); // 记录最小的排列while(nextp(nums)){res.push_back(nums);}return res;}bool nextp(std::vector<int>& nums){int n = nums.size();// 找到第一个顺序对int i;for(i = n - 2; i >= 0; i--){if(nums[i] < nums[i+1]) break;}if(i == -1) return false; //已经是最大排列了// 找到一个nums[j] > 上面的nums[i]int j;for(j = n - 1; j > i; j--){if(nums[j] > nums[i]) break;}// 交换nums[i] 和 nums[j]std::swap(nums[i], nums[j]);// 反转num[i+1] ~ nums.end()std::reverse(nums.begin() + i + 1, nums.end());return true;}private:std::vector<std::vector<int>> res;
};int main(int argc, char *argv[]){std::vector<int> test = {1,2,3};Solution S1;std::vector<std::vector<int>> res = S1.permute(test);for(auto v : res){for(auto i : v) std::cout << i << " ";std::cout << std::endl;}
}

2--旋转图像(48)

主要思路:

         按层(圈)来旋转,对于坐标为(r, c)的值,其旋转后的坐标为(c, n - 1 - r),且每四个(上,右,下,左)为一个循环节,循环交换循环节中四个元素即可,视频讲解参考:旋转图像

#include <iostream>
#include <vector>
#include <algorithm>class Solution {
public:void rotate(std::vector<std::vector<int>>& matrix) {int n = matrix.size();// 按层(圈)处理for(int L = n; L > 0; L -= 2){// 左上角起始元素int row = (n - L) / 2;int col = row;// 当前这一行,顶行的前 L-1 个元素for(int k = 0; k < L - 1; k++){// 当前元素int r = row, c = col + k;int tmp = matrix[r][c];// 从(r, c)开始寻找循环节,循环节的长度一定是4for(int i = 0; i < 4; i++){// 旋转后的坐标int rr = c;int cc = n - 1 - r;// 旋转std::swap(tmp, matrix[rr][cc]);r = rr;c = cc;}}}}
};
int main(int argc, char *argv[]){std::vector<std::vector<int>> test = {{1,2,3}, {4,5,6}, {7,8,9}};Solution S1;S1.rotate(test);for(auto v : test){for(auto i : v) std::cout << i << " ";std::cout << std::endl;}
}

3--字母异位词分组(49)

主要思路:

        

http://www.yayakq.cn/news/422748/

相关文章:

  • 自己做网站需要填税表吗做神马网站快速排名软
  • 龙岩做网站开发哪家厉害开发公司不动产登记费入什么科目
  • 广东工程建设监理有限公司网站深圳龙岗区网站建设
  • 泰安网站建设制作宁波市公共资源交易中心
  • 没电脑可以建网站吗投票网站设计
  • 西安企业网站建设公司软件开发费
  • 周口网站制作做网站的会计分录
  • 如何评判一个网站建设的怎么样如果给公司网站做网络广告
  • 买了个域名怎么做网站质量好网站建设商家
  • 南京 网站建设模板价格做网站建设与推广企业
  • 为农村建设网站报告微信小程序源码网站
  • 网站的搜索功能怎么做室内装饰设计学什么
  • 做淘宝网站要安全保障么网站建设经验分享
  • 网站怎么解析到域名网站服务器配置
  • 做游戏网站的市场wordpress tag 列表
  • 农博园网站建设投标书哈尔滨住建局网站首页
  • 那几家是做失物招领的网站网站开发应用短信
  • dedecms网站logo在线网页代理极光
  • 做旅游攻略什么网站最好品牌策划包括哪几个方面
  • sns社交网站源码网络游戏网站制作
  • 做app 的模板下载网站有哪些北京企业网站报价
  • 公众信息帮竞彩网站做维护吗建筑行业
  • 商城网站主机可以做英文单词puzzle的网站
  • 大连p2p网站建设cdn wordpress 登录
  • 网站设计结构图用什么做江苏工程建设信息网官网
  • 做网站需要哪些技能唐山网站建设设计
  • 电商网站建设 猪八戒网wordpress wap插件
  • 襄阳营销型网站微信小程序开发步骤图
  • 哪里做外贸网站低代码开发
  • 电子商务网站建设系统功能快速建站