• 【C++】vector相关OJ



    ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ"
    在这里插入图片描述


    1. 只出现一次的数字

    力扣链接
    在这里插入图片描述

    代码展示:

    class Solution {
    public:
        int singleNumber(vector<int>& nums) 
        {
            int value = 0;
            for(auto e : nums)
            {
                value ^= e;
            }
            return value;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    思路:异或

    2. 杨辉三角

    力扣链接
    在这里插入图片描述

    代码展示:

    class Solution {
    public:
        vector<vector<int>> generate(int numRows) 
        {
            vector<vector<int>> vv;
            vv.resize(numRows);//开空间,numRows个vector对象
            //杨辉三角
            for (size_t i = 0; i < vv.size(); ++i)
            {
                //开空间
                vv[i].resize(i + 1, 0);//开空间
                vv[i][0] = 1;
                vv[i][vv[i].size() - 1] = 1;
            }
    
            for (size_t i = 0; i < vv.size(); ++i)
            {
                for (size_t j = 0; j < vv[i].size(); ++j)
                {
                    if (vv[i][j] == 0)
                    {
                        vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j];
                    }
                }
            }
            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
    • 26
    • 27
    • 28

    思路
    (1)规律:头尾都是1,中间第[j]个数等于上一行[j-1]+[j];
    (2)通过两次operator,来访问每一个数据。本质上是先访问第i个vector< int >对象,然后再访问这个对象的第j个int类型的数据(动态二维数组);

    注意:(1)vector< vector < int >> 类比二维数组,vector < int > 类比于int数组,vector< vector < int >> 类比于对象数组,对象全是vector< int >类型的

    3. 电话号码字母组合

    力扣链接
    在这里插入图片描述
    代码展示:

    class Solution {
        //数字对应英文字母的映射
        string _numToStr[10] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    public:
        //递归函数
        void _letterCombine(string digits, size_t di, string combineStr, vector<string>& retV)
        {
            //返回条件
            if(di == digits.size())
            {
                retV.push_back(combineStr);
                return;
            }
            //取到数字字符转换为数字,在取到对应的字符串
            int num = digits[di] - '0';//数字字符转换为数字
            string str = _numToStr[num];//取到对应的字符串
            for (auto ch : str)
            {
                _letterCombine(digits, di + 1, combineStr + ch, retV);
            }
    
    
        }
        vector<string> letterCombinations(string digits) 
        {
            vector<string> retV;
            if(digits.empty())
                return retV;
            size_t di = 0;
            string str;
            _letterCombine(digits, di, str, retV);
            return retV;
        }
    };
    
    • 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
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    思路:(1)排列组合,多路递归。
    (2)当di等于数字字符串的大小【digits.size()】时,此时的combineStr尾插到retV【类型是vector< string >】并递归返回。

    注意:(1)指的是,2-9键所对应的字母的组合【比如:2对应的就是"abc",3对应的就是"def",4对应的就是"ghi",7对应的就是"pqrs"等】。
    (2)输出多少个数字,字符串的长度就是多少。

  • 相关阅读:
    排序-基数排序
    如何用Stable Diffusion模型生成个人专属创意名片?
    今日睡眠质量记录79
    波束形成中的主瓣宽度
    深入理解 Java 对象的内存布局
    隐私计算头条周刊(9.11-9.17)
    时间任务管理软件OmniFocus 3 mac中文版软件特色
    导数大题练习
    【云原生】Kubernetes(K8S)与数据库
    MyBatis-Plus使用
  • 原文地址:https://blog.csdn.net/m0_57388581/article/details/133578119