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

巨野网站建设昆明网站建设首选公司

巨野网站建设,昆明网站建设首选公司,wordpress 附件下载插件,火车头采集 wordpress目录 一.leetcode:43. 字符串相乘 1.问题描述 2.问题分析 3.问题求解 二. leetcode:541. 反转字符串 II 1.问题描述 2.题解 三. leetcode:125. 验证回文串 1.问题描述 2.双指针法求解 一.leetcode:43. 字符串相乘 43…

目录

一.leetcode:43. 字符串相乘

1.问题描述

2.问题分析

3.问题求解 

二. leetcode:541. 反转字符串 II 

1.问题描述 

2.题解

三. leetcode:125. 验证回文串

1.问题描述

2.双指针法求解 


一.leetcode:43. 字符串相乘

43. 字符串相乘 - 力扣(Leetcode)

1.问题描述

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

注意:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字字符组成。
  • num1 和 num2 都不包含任何前导零。 

题解接口:

class Solution
{
public:string multiply(string num1, string num2){}
};

2.问题分析

  • 关于两个乘积的结果的分析

假设num1为n位数,num2为m位数,则num1与num2的乘积最多为n+m位数。

  •  为了方便计算,我们可以先将数字字符串转换成相应的数字数组

3.问题求解 

  •  第一步

封装一个转换函数数字字符串倒序存入相应的数字数组(倒不倒序其实无所谓)

    void convert(string& nums, int* const Anum){int end = nums.size();int start = 0;for (start = 0; start < nums.size(); start++){Anum[start] = nums[end - 1]-'0';   //-'0'是为了将字符转换为相应数字end--;}}
  • 第二步

动态开辟一个数组Anum1用于倒序存储字符串num1对应的数字

动态开辟一个数组Anum2用于倒序存储字符串num2对应的数字

动态开辟一个数组Answer用于倒序存储两数相乘的计算结果

创建一个string StrAns用于存储最后要输出的结果。

        int ptrnum1 = num1.size();int ptrnum2 = num2.size();int* const Anum1 = new int[ptrnum1];int* const Anum2 = new int[ptrnum2];int* const Answer = new int[ptrnum1 + ptrnum2]{0};//存储结果的数组中所有元素初始化为0string StrAns;StrAns.reserve(ptrnum1 + ptrnum2); convert(num1,Anum1);convert(num2,Anum2);

注意利用reserve接口提前为StrAns字符串预留好存储空间,避免后续扩容增加时间消耗

  • 第三步(算法部分)

基本思路是用三个数组模拟竖式乘法:

循环框架: 

        for(i=0;i<ptrnum1;i++){for(j=0;j<ptrnum2;j++){;};}

变量limitAnswer用来记录计算结果的位数

变量tem用来保存当前(两个数某两位的乘积+进位+存储结果的数组的原位)的和;

变量carry用来保存进位;

        int limitAnswer = 0;int i=0;int j=0;int tem=0;int carry=0;for(i=0;i<ptrnum1;i++){for(j=0;j<ptrnum2;j++){tem = carry + Anum1[i]*Anum2[j] + Answer[j+i];Answer[i+j]=tem%10;           //tem的个位就是当前Answer对应位的取值carry = tem/10;               //tem取十位数得到下一位的进位}if(carry){Answer[i+j]=carry;//该轮循环计算完后若还存在进位则将进位置于当前结果的最高位//的下一位carry=0;limitAnswer=i+j;  //记录当前结果的位数}else{limitAnswer = i+j-1;//记录当前结果的位数}}

算法动画演示:

代码段实际计算过程中Answer中的数字是逆序存储的

  •  第四步

将结果倒序存入用于作返回值的对象StrAns的字符串中:

        for(i=limitAnswer;i>=0;--i){StrAns += (Answer[i]+'0');}

完整题解代码:

class Solution
{
public:void convert(string& nums, int* const Anum){int end = nums.size();int start = 0;for (start = 0; start < nums.size(); start++){Anum[start] = nums[end - 1]-'0';end--;}}string multiply(string num1, string num2){if("0"==num1||"0"==num2){return "0";}int ptrnum1 = num1.size();int ptrnum2 = num2.size();int* const Anum1 = new int[ptrnum1];int* const Anum2 = new int[ptrnum2];int* const Answer = new int[ptrnum1 + ptrnum2]{0};string StrAns;StrAns.reserve(ptrnum1 + ptrnum2);convert(num1,Anum1);convert(num2,Anum2);int limitAnswer = 0;int i=0;int j=0;int tem=0;int carry=0;for(i=0;i<ptrnum1;i++){for(j=0;j<ptrnum2;j++){tem = carry + Anum1[i]*Anum2[j] + Answer[j+i];Answer[i+j]=tem%10;carry = tem/10;}if(carry){Answer[i+j]=carry;carry=0;limitAnswer=i+j;}else{limitAnswer = i+j-1;}}for(i=limitAnswer;i>=0;--i){StrAns += (Answer[i]+'0');}return StrAns;}
};

 

二. leetcode:541. 反转字符串 II 

541. 反转字符串 II - 力扣(Leetcode) 

1.问题描述 

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样 

2.题解

class Solution 
{
public:string reverseStr(string s, int k) {int n = s.length();for (int i = 0; i < n; i += 2 * k) {reverse(s.begin() + i, s.begin() + min(i + k, n));}return s;}
};
  • min是C++标准库命名空间std中的一个函数,用于返回两个数中的较小值
  • reverse是C++标准库命名空间std中的一个函数,用于string对象的字符串逆序,形参为两个string对象的迭代器(初学者可以类比为指针)
  • 将迭代器类比为指针:  s.begin()相当于指向string字符串首元素的指针 

三. leetcode:125. 验证回文串

1.问题描述

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串 。

给你一个字符串 s,如果它是回文串 ,返回 true ;否则,返回 false 

示例 :

输入: s = "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。

2.双指针法求解 

本题利用双指针法可以同时节省时间和空间:

  • 创建两个下标变量,其中一个起始位置指向字符串首字符,另外一个起始位置指向字符串末尾字符。
  • 起始位置指向字符串首字符的指针向后遍历,起始位置指向字符串末尾字符的指针向前遍历

题解代码:

class Solution 
{
public:bool isword (char & c)             //封装一个字符判断函数{if((c>='a'&&c<='z') ||( c>='0'&&c<='9')){return true;}else if((c>='A'&&c<='Z'))     //大写转小写{c+=32;return true;}return false;}bool isPalindrome(string s) {int right= s.size()-1;int left=0;while(right>left){while(right>left && !isword(s[left]))  //左指针跳过非数字字母字符{left++;}while(right>left && !isword(s[right])) //右指针跳过非数字字母字符{right--;}if(s[left]!=s[right])                  //若过程中有字符不相同则说明不是回文串{return false;}left++;right--;}return true;}
};

 注意内层循环条件中right>left不能少。

 

 


文章转载自:

http://3SF8Zl9N.hpkgm.cn
http://MgkzPxwr.hpkgm.cn
http://6qyhfep0.hpkgm.cn
http://WFlCZxP8.hpkgm.cn
http://JhI2lLeb.hpkgm.cn
http://Q2uUKe4c.hpkgm.cn
http://qSQtM5EU.hpkgm.cn
http://7RzS81O8.hpkgm.cn
http://lc7IMagD.hpkgm.cn
http://5MTLldhx.hpkgm.cn
http://uPMQPPpo.hpkgm.cn
http://YxjuE0a0.hpkgm.cn
http://PAaTBY9l.hpkgm.cn
http://9VyB6BGE.hpkgm.cn
http://Lh49Pyub.hpkgm.cn
http://k3EzyWt4.hpkgm.cn
http://NOzYHHzU.hpkgm.cn
http://G2uhsSvy.hpkgm.cn
http://S6194Sjd.hpkgm.cn
http://QPClLIe5.hpkgm.cn
http://SAR7zAlx.hpkgm.cn
http://8bsykUlJ.hpkgm.cn
http://crQi1DlQ.hpkgm.cn
http://v5JxHcp8.hpkgm.cn
http://DPgm6rx5.hpkgm.cn
http://VRHwTaG9.hpkgm.cn
http://Jc1Z97TE.hpkgm.cn
http://ojhLlShm.hpkgm.cn
http://pPMizE6X.hpkgm.cn
http://VcE8LlT0.hpkgm.cn
http://www.dtcms.com/wzjs/773478.html

相关文章:

  • 湖南做网站价格ppt模板免费下载素材小清新
  • mysql 网站空间怎么把dw做的网站传上去
  • 营销网站建设大概费用wordpress中文下载
  • 网站icp备案新规高邮建设局网站
  • 专业的做pc端网站长沙网警
  • 临平建设局网站php做网站的公司有哪些
  • 黑龙江开放网站备案国外购物网站app
  • 番禺建设网站企业搜索引擎优化seo什么意思
  • 域名访问网站在哪里找网站域名保护几年
  • 百度站长平台论坛巴彦淖尔市百家姓网站建设
  • 成都网站建设单招网企业网站导航优化
  • 微网站在哪建医疗网站建设渠道
  • 自己做免费手机网站百度人气榜排名
  • 网站注册步骤ui做网站实例
  • 沈阳做网站最好的公司医疗器械外贸网站建设
  • 网站开发支付功能自己在线制作logo免费网站
  • 建一个团购网站dedecms 网站搬迁 模板路径错误
  • 网站怎么做搜索功能学用mvc4做网站
  • 洛阳制作网站的公司吗网站建设与管理个人总结
  • 做电子商务网站 除了域名 网页设计 还有服务器 和网站空间网站翻页模板
  • 温州网站建设大全网站开发实用案例教程
  • 福州婚庆网站建设哪家好qq空间 同步 wordpress
  • 查询系统网站模板营销的网站
  • 网站建设项目资金申请报告网站推广协议
  • php网站开发预算文档网站推广妙招
  • 2008iis网站属性咨询公司名称
  • 网站建设问题调查单页营销型网站模板下载
  • 建设银行网站招聘官网杭州网站制作工作室
  • 深圳市住房和城乡建设局网站兰溪好品质高端网站设计
  • 商贸有限公司网站建设网站开发实用技术第2版文档