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

静安网站建设中国搜索网站排名

静安网站建设,中国搜索网站排名,网站建设公司 - 百度,典型网站开发的流程目录 题目思路分析代码展示 题目 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。 例如,对于 num 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num k 的 数组形…

目录

  • 题目
  • 思路分析
  • 代码展示


题目

整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。

  • 例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。

给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。

示例 1:
输入:num = [1,2,0,0], k = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234

示例 2:
输入:num = [2,7,4], k = 181
输出:[4,5,5]
解释:274 + 181 = 455

思路分析

两个数相加,我们首先要考虑结果存在哪,我们该开辟多大的空间;我们知道两个数相加,结果的位数最大不会超过两个加数中最大的位数+1;所以我们先要判断传进的k是多少位数:

int kSize = 0;//存储k的位数
int kNum = k; //拷贝一份,方便下面求k的位数
while (kNum)
{++kSize;kNum /= 10;
}

然后我们再通过两个位数的最大值来开辟空间:

 //相加的时候以位数多的数来进行开扩空间和循环的判断
int len = numSize > kSize ? numSize : kSize; 
int* retArr = (int*)malloc(sizeof(int) * (len + 1));
if (retArr == NULL)
{perror("malloc");exit(-1);
}

有了开辟的空间,我们就要将计算的结果存进空间里,由于进位我们一定是从左到右进行计算的:
为了让大家好理解:我们可以先将每位算出的结果从左到右按顺序存好,最后将其倒置:
在这里插入图片描述
整理以上的思路:所以循环体我们可以这样写

while (len--)
{int a = 0;ret = num[end] + nextNums + k % 10;if (ret > 9){ret -= 10;nextNums = 1;}else{nextNums = 0;}retArr[reti] = ret;reti++;k /= 10;end--;
}

但是这时候我们就有一个问题了,如果k的位数比num的元素个数大,这时num就会存在越界的问题:
在这里插入图片描述
这时我们可以定义一个变量a = 0,如果end在有效的范围的时候我们就可以直接将num[end]赋值给a,让a与k的对应位相加,但是,如果不是有效位,我们可以将a与其相加:

int a = 0;
if (end >= 0)
{a = num[end];end--;
}
ret = a + nextNums + k % 10;

最后不要忘记了倒置数组:

//倒置数组
int left = 0;
int right = reti - 1;
while (left < right)
{int tmp = retArr[left];retArr[left] = retArr[right];retArr[right] = tmp;left++;right--;
}

代码展示

int* addToArrayForm(int* num, int numSize, int k, int* returnSize) {int kSize = 0;//存储k的位数int kNum = k; //拷贝一份,方便下面求k的位数while (kNum){++kSize;kNum /= 10;}int len = numSize > kSize ? numSize : kSize;  //相加的时候以位数多的数来进行开扩空间和循环的判断int* retArr = (int*)malloc(sizeof(int) * (len + 1));if (retArr == NULL){perror("malloc");exit(-1);}int end = numSize - 1;int reti = 0;int nextNums = 0;  //判断是否进位int ret = 0;while (len--){//防止k的位数大于num元素个数,导致越界int a = 0;if (end >= 0){a = num[end];end--;}ret = a + nextNums + k % 10;if (ret > 9){ret -= 10;nextNums = 1;}else{nextNums = 0;}retArr[reti] = ret;reti++;k /= 10;}if (nextNums == 1){retArr[reti] = 1;reti++;}//倒置数组int left = 0;int right = reti - 1;while (left < right){int tmp = retArr[left];retArr[left] = retArr[right];retArr[right] = tmp;left++;right--;}*returnSize = reti;return retArr;}

当然,这种算法可以过leetcode的
在这里插入图片描述


http://www.ds6.com.cn/news/21720.html

相关文章:

  • 江西做网站找谁百度网盘提取码入口
  • 网站建设心得网站推广怎样做
  • 高端网站开发程网站的优化策略方案
  • 携程网站模板seo工作职位
  • 局机关网站建设高清视频网络服务器
  • 上海建设银行营业网站做公司网站
  • 动态网站 模板seo中文
  • 珠海电脑自己建网站得物app的网络营销分析论文
  • 品牌网站建设小7蝌蚪seo优化工具软件
  • 安徽省建设协会网站网站优化费用报价明细
  • 电子商务网站建设的需求如何在百度提交网站
  • wordpress 段子模板谷歌优化工具
  • 国外的网站叫什么中国站免费推广入口
  • 网站开发前台代码和后台代码怎么创建网站平台
  • 用vue做pc端网站好吗买卖链接网站
  • 企业网站怎么做才能留住客户云计算培训
  • wordpress文章存在哪里seo网站首页推广
  • 用php做电子商务网站汕头seo网站建设
  • 专门做自助游攻略的网站是哪个交换神器
  • 怎么看一个网站是html5网站优化比较好的公司
  • 日本做设计的网站seo行业
  • 如何构建一个电子商务网站友情链接图片
  • 天津网站建设公司建站宝盒
  • 怎么创建一个博客网站吗搜索推广广告
  • 无锡本地模板网站建设产品全国新冠疫苗接种率
  • 国家建设网站公关公司提供的服务有哪些
  • 管理系统门户网站开发路线备案查询
  • 建设工程公司注册条件苏州seo网站管理
  • 椒江做网站宁波seo外包平台
  • 国企网站建设宁波企业seo推广