thinkphp 企业网站,linux wordpress 下载文件,萍乡网站优化,贵州三大交通建设企业数组实现整数加法
问题描述
给定一个由 整数 组成的 非空 数组所表示的非负整数#xff0c;在该数的基础上加一。最高位数字存放在数组的首位#xff0c; 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外#xff0c;这个整数不会以零开头。详见leetcode66
问题…数组实现整数加法
问题描述
给定一个由 整数 组成的 非空 数组所表示的非负整数在该数的基础上加一。最高位数字存放在数组的首位 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外这个整数不会以零开头。详见leetcode66
问题分析
可以从数组的末尾即length-1下标处开始向前遍历末尾元素➕1如果没有进位直接返回该数组例如 1231-124如果有进位前一位继续加一直至没有进位(例如 191-20)如果循环结束仍有进位则需要创建一个比原数组长度增加1的数组将首元素置为1进行返回(例如 991-100)。
代码实现
public int[] plusOne(int[] digits) {for(int idigits.length-1;i0;i--){digits[i];digits[i]%10;if(digits[i]!0){return digits;}}digits new int[digits.length1];digits[0] 1;return digits;
}字符串加法
问题描述
给定两个字符串形式的非负整数计算他们的和并仍然以字符串的形式返回。
问题分析
从两个字符串末尾字符依次向前遍历取对应位的字符进行加法设置进位标识结果可通过StringBuilder进行存储。最后反转即可。
代码实现
public static String plusString(String str1, String str2) {int i str1.length() - 1;int j str2.length() - 1;int add 0;int x;int y;StringBuilder sb new StringBuilder();while (i 0 || j 0 || add ! 0) {if (i 0) {x str1.charAt(i) - 0;} else {x 0;}if (j 0) {y str2.charAt(j) - 0;}else {y 0;}int result x y add;sb.append(result%10);if(result/10 1){add 1;}else{add 0;}i--;j--;}return sb.reverse().toString();
}二进制加法
问题描述
给你两个二进制字符串 a 和 b 以二进制字符串的形式返回它们的和。详见leetcode67
问题分析
仍然是两个字符串末尾字符依次向前遍历取对应位的字符进行加法设置进位标识结果可通过StringBuilder进行存储。最后反转即可。只是结果取模和判断进位与十进制有所不同详见代码实现
代码实现
public String addBinary(String a, String b) {int i a.length() - 1;int j b.length() - 1;int add 0;int x;int y;StringBuilder sb new StringBuilder();while(i0 || j0 || add!0){if(i0){x a.charAt(i)-0;}else{x 0;}if(j0){y b.charAt(j)-0;}else{y 0;}int sum x y add;sb.append(sum%2);add sum / 2;i--;j--;}if(add 1){sb.append(1);}return sb.reverse().toString();
}总结与拓展
数组和字符串(本质上是字符数组)的加法其实只需要尽心遍历相加即可但是数字是从低位到高位相加而字符串是从高位到低位存储。所以需要反响遍历并且注意进位通过十进制与二进制的加法可以拓展到任意进制的加法只是在结果取模和判断进位时有所不同。