解题思路:时间复杂度O( m a x ( l e n 1 , l e n 2 ) max(len1,len2) max(len1,len2)),len1和len2为两个正整数的长度,空间复杂度O( 1 1 1),java的空间复杂度为O( n n n),因为java的字符串底层的字符数组是final修饰的常量,无法修改,只能使用StringBuffer或StringBuilder等容器
采取低位相加逢十进一法
每次取低位两个数相加,如果结果大于十,就进1
用一个变量保存进位信息。
代码
classSolution{publicStringaddStrings(String num1,String num2){int m = num1.length(), n = num2.length();//两个加数int[] ans =newint[m+n+1];//保存最终相加结果int k = m+n, i = m-1, j = n-1;//k是ans的下标,i是num1的下标,j是num2的下标,从低位开始逢十进一int add =0;//进位while(i >=0|| j >=0|| add !=0){//如果还有数可加int d1 = i >=0? num1.charAt(i)-'0':0;//如果有加数1,就获取,否则为0int d2 = j >=0? num2.charAt(j)-'0':0;//有加数2就获取,否则为0int sum = d1+d2+add;//加数1+加数2+进位ans[k--]= sum %10;//将数字取余10的结果放到ans的后面add = sum /10;//将进位信息提取出来i--;//下一个数j--;//下一个数}StringBuilder res =newStringBuilder();//转成字符串for(k = k+1;k<ans.length;k++) res.append(ans[k]);return res.length()>=1? res.toString():"0";//返回结果}}
原题链接:整数删除
给定一个长度为 N 的整数数列:A1,A2,...,AN。
你要重复以下操作 K 次:
每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除,并把与它相邻的…