注册公司制作网站,明星网站建设,教育机构做网站素材,怎么建立微信大转盘的网站服务题目描述
不能直接把字符串转换成整数#xff08;会溢出#xff09;面试被问过#xff0c;今天刷面经又刷到。。那就索性水一篇文吧#xff01;更新#xff1a;原题就是 leetcode 415
思路 代码
只要理好字符串s、字符串t、答案字符串的对应位关系就好啦#x…题目描述
不能直接把字符串转换成整数会溢出面试被问过今天刷面经又刷到。。那就索性水一篇文吧更新原题就是 leetcode 415
思路 代码
只要理好字符串s、字符串t、答案字符串的对应位关系就好啦注意 carry 位的考虑其中一个字符串已经结束时也还需要考虑。 加法结束后还要考虑最后一次注意进行字符之间的加法的时候不要算乱了 时间复杂度 O(max(m, n))取两字符串的最大长度
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可* 计算两个数之和* param s string字符串 表示第一个整数* param t string字符串 表示第二个整数* return string字符串*/public String solve (String s, String t) {int sL s.length();int tL t.length();int maxL Math.max(sL, tL);// 从后往前从小到大char[] ans new char[maxL];int carry 0;// 时间复杂度 O(max(m, n))for(int i sL - 1, j tL - 1; maxL 0; i--, j--, maxL--){int nowSum 0;// 一方先结束的情况if(i 0){nowSum t.charAt(j) - 0 carry;}// 同上else if(j 0){nowSum s.charAt(i) - 0 carry;}// 都没结束的情况注意这三种情况都要考虑 carry 位else{nowSum s.charAt(i) t.charAt(j) - 0 - 0 carry;}// 进位处理carry nowSum / 10;nowSum % 10;ans[maxL - 1] (char)(nowSum 0);}String ansS new String(ans);// 最后一次进位处理if(carry 1){ansS 1 ansS;}return ansS;// write code here}
}更新版
刷到评论区大佬的做法很nicewhile 循环写得很巧妙。
class Solution {public String addStrings(String num1, String num2) {StringBuilder sb new StringBuilder();int carry 0;int i num1.length() - 1, j num2.length() - 1;while(i 0 || j 0 || carry ! 0) {if(i 0) {carry num1.charAt(i--) - 0;}if(j 0) {carry num2.charAt(j--) - 0;}sb.append(carry % 10);carry / 10;}return sb.reverse().toString();}
}