码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【C++系列】STL容器——vector类的例题应用(12)


    前言

    大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎!本章主要内容面向接触过C++的老铁,下面是收纳的一些例题与解析~
    主要内容含:
    在这里插入图片描述

    目录

      • 【例1] 只出现一次的数字i(范围for与模等(^=))
      • 【例2] 杨辉三角OJ(resize & vector类型的vector)
      • 【例3] 电话号码的数字组合(多路递归)

    欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

    • YY的《C++》专栏
    • YY的《C++11》专栏
    • YY的《Linux》专栏
    • YY的《数据结构》专栏
    • YY的《C语言基础》专栏
    • YY的《初学者易错点》专栏
    • YY的《小小知识点》专栏

    【例1] 只出现一次的数字i(范围for与模等(^=))

    • 给出一段数字(例:223344566)(数字出现均两次,只有一个数字只出现一次),并保存在vector中,找到这个出现一次的数字
    • 核心思路:【^=】相同的数模等后为1,最后结果只剩下这个只出现一次的数字
    class Solution 
    {
    public:
      int singleNumber(vector<int>& nums)
      {
       int value = 0;
       for(auto e : v)
        {
          value ^= e; 
        }
       return value;
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    【例2] 杨辉三角OJ(resize & vector类型的vector)

    • 设计思路图示:
      1. 初始化每一行所有元素都为“1”
      1. 根据杨辉三角特性调整中间元素在这里插入图片描述
        在这里插入图片描述
    // 涉及resize / operator[]
    // 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]
    class Solution 
    {
        public:
         vector<vector<int>> generate(int numRows)//传入的参数表示要求杨辉三角的行数
        {
        
         vector<vector<int>> vv(numRows);//初始化每一行所有元素都为“1”
         for(int i = 0; i < numRows; ++i)
          {
              vv[i].resize(i+1, 1);
          }
          
          
         for(int i = 2; i < numRows; ++i)//根据杨辉三角特性调整中间元素
         {
           for(int j = 1; j < i; ++j)
             {
               vv[i][j] = vv[i-1][j] + vv[i-1][j-1];
             }
         }
        return vv;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    【例3] 电话号码的数字组合(多路递归)

    • 题目要求输入所示:在这里插入图片描述
    • 解题思路:
    • 首先根据题目要求,我们明白要设置一个string,存储【abc】【def】等等字符串
    • 当我们输入"258时",根据题意,我们要做到如图所示【abc】【jkl】【tuv】三者的全排列
    • 我们发现其中可以用 多路递归 的方式来访问
    • 1.图中 aj先分别访问了t u v,得到ajt,aju,ajv ;
    • 2.随后放回,a访问k,再同(1)步骤,分别访问t u v,得到 akt,aku,akv ,同理…
      在这里插入图片描述
    • 代码细节:
      1. 我们一开始要设置【字串:digits】【层次:level】【存储 结合后返回的一系列串:combineStr】【给定vector:v】
      1. 我们发现,每一层都要涉及到 多路递归 ,于是我们要根据 层数 进行 for循环 for循环
      1. 我们发现,递归后得到的字串的 元素个数 与 层数 是相同的
      1. 注意点: 要将字符类转换成整型(-“0”),以便于访问对应“电话按键”strA中的字符串
    	string strA[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
    
                 // 输入的数字组合    当前层次      结合后的新字符串      存储所有的全排列组合
    	void Combine(string digits, int level, string combineStr, vector<string&> v)
    	{
    	  if (level == digits.size()) //递归后得到的字串的元素个数与层数是相同的
    	    {
    	    	v.push_back(combineStr);//当到最后一层的时候,将新字符串尾插进vector中
    		    return;
    		}
    		
    	int num = digits[level] - '0';//将字符类转换成整型
    	string str = strA[num];//访问对应“电话按键”strA中的字符串
    	
    	for (size_t i = 0; i < str.size(); ++i) //每一层都要涉及到多路递归,于是我们要根据层数进行for循环
         	{
    	     	Combine(digits, level + 1, combineStr + str[i], v);
    	    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    【Leetcode】964. Least Operators to Express Number
    ps制作人物抠图,给人物自拍照进行精细抠图
    基于MATLAB驾驶行为的疲劳实时检测研究
    RocketMQ 5.0 可观测能力升级:Metrics 指标分析
    求职刷题力扣DAY14 ---二叉树的基础遍历,迭代、递归
    怎么写好宣传稿件?纯干货
    使用实例解释UML类图
    【Linux基础】第31讲 Linux用户和用户组权限控制命令(三)
    Java项目:校园相册管理系统(java+SSM+html+bootstrap+layui+Mysql)
    分析ORACLE批量更新中的ORA-00911错误:MyBatis <foreach> 场景与解决方案
  • 原文地址:https://blog.csdn.net/YYDsis/article/details/132642285
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号