leetcode刷题常用C++函数

本文介绍了C++中字符串的截取、扩容、排序、初始化、比较函数以及位运算的相关知识点。通过实例展示了如何使用substr()进行字符串截取,resize()进行扩容,自定义cmp函数实现sort()排序,以及如何初始化字符串。同时,讲解了strcmp()和strcasecmp()在字符串比较中的应用,以及位运算在特定问题中的应用。最后,讨论了vector的insert()函数的多种用法。
摘要由CSDN通过智能技术生成

1. 字符串截取

截取下标从2(第3个字符)开始截取3个字符的字符串

string str = "ABCDEFG";
string cut= str.substr(2,3);

最终,cut="CDE",即从下标为2开始向后数3位

2. 字符串扩容

string s(len);
s.resize(len+len2);

3. sort函数中cmp重写

如果cmp返回结果为False, 那么函数就会将他们互换位置;

如果cmp返回结果为True,就会保持原来位置不变。

class Solution {
public:
    string minNumber(vector<int>& nums) {
        string s="";
        sort(begin(nums),end(nums),cmp);
        for(int i=0;i<nums.size();i++)
            s+=to_string(nums[i]);
        return s;
    }
    bool static cmp(string& s1, string& s2)//注意要加static
    {
        return s1+s2<s2+s1;
    }
};

 另一种形式:

sort(begin(nums),end(nums),[](string& s1, string& s2){//注意没有函数名cmp,用[]
            return s1+s2<s2+s1;
        });

4.字符串初始化

string s(n,'0');//s="00...00",初始化为n个0

5.字符串比较函数

in strcmp(string str1,string str2)               //区分字符串中字母大小写地比较
int strcasecmp(string str1,string str2)          //忽略字符串中字母大小写地比较

str1=str2时,返回0;str1>str时返回1;str1<str2时返回-1。

6. 关于位运算

剑指15.16都与为运算有关

7.c++vector insert函数

iterator insert( iterator loc, const TYPE &val );
void insert( iterator loc, size_type num, const TYPE &val );
void insert( iterator loc, input_iterator start, input_iterator end ); 

insert() 函数有以下三种用法:
在指定位置loc插入值为val的元素,返回指向这个元素的迭代器,
在指定位置loc插入num个值为val的元素
在指定位置loc插入区间[start, end)的所有元素 .

引用中的代码片段是一个递归函数,名为beautifulArray,它接受一个整数n作为参数,并返回一个vector<int>类型的结果。这个函数用于生成一个长度为n的漂亮数组,漂亮数组满足以下条件:如果将其划分为两个任意长度的子数组,那么两个子数组的元素之和不相等。 函数的实现思路是通过递归,将问题划分为两个子问题,然后合并子问题的解。首先判断n是否等于1,如果等于1,则直接返回一个包含1的数组。否则,将n减1后的一半传入递归函数beautifulArray,得到一个漂亮数组res1。然后将n的一半传入递归函数beautifulArray,得到另一个漂亮数组res2。最后,将res1中的每个元素乘以2并减去1,然后与res2中的每个元素乘以2合并到结果数组res中。 引用中的代码片段是一个函数,名为translateNum,它接受一个整数num作为参数,并返回一个整数。这个函数用于计算将整数num翻译成字符串的不同方法数。 函数的实现思路是将整数num转换为字符串str,然后创建一个长度为str.size()-1的动态数组dp,用于记录不同位置的翻译方法数。然后初始化dp和dp[1]为1,表示前两位数字的翻译方法数。接下来,从第三位数字开始遍历字符串str,如果当前数字与前两位数字可以构成一个在10到25之间的整数,则将dp[i]的值设置为dp[i-1]+dp[i-2],表示当前位置的翻译方法数为前一位和前两位数字的翻译方法数之和。最后,返回dp最后一个元素的值,即为翻译整数num的不同方法数。 引用中的代码片段是一个函数,名为numberOfArithmeticSlices,它接受一个vector<int>类型的数组nums作为参数,并返回一个整数。这个函数用于计算数组nums中等差子序列的个数。 函数的实现思路是通过动态规划,创建一个与nums长度相同的动态数组dp,用于记录以每个位置为结尾的等差子序列的个数。然后遍历数组nums,从第三个元素开始,判断当前元素与前两个元素是否构成等差数列,如果是,则将dp[i]的值设置为dp[i-1]加1,表示以当前位置为结尾的等差子序列个数为前一位的等差子序列个数加1。最后,返回dp数组中所有元素的和,即为等差子序列的个数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值