/**
* 两个无穷大的数字相加
* @param param1 无穷大数字1
* @param param2无穷大数字2
* @return 两个无穷大的数字相加之后的无穷大值
*/
public static int[] add(int[] param1,int[] param2) {
int length = param1.length > param2.length ? param1.length : param2.length;
//创建一个无穷大数字计算结果存放
int[] result = new int[length];
int i = 0;
//每个位的数字相加
while (i < param1.length && i < param2.length) {
result[length-i-1] = param1[param1.length-i-1] + param2[param2.length-i-1];
i++;
}
//当如果param1大于param2时取param1的前几位数字,否则相反
if (param1.length > param2.length) {
while(i < param1.length) {
result[length-i-1] = param1[length-i-1];
i++;
}
} else if (param2.length > param1.length) {
while(i < param2.length) {
result[length-i-1] = param2[length-i-1];
}
}
//处理进位情况,如果位数大于等于10,那么前一位则加1并且该位减去10
for (int k = length -1;k > 0; k--) {
if (result[k] >= 10) {
result[k-1] = result[k-1] + 1;
result[k] = result[k] - 10;
}
}
//如果第一位大于等于10时也需要处理
if (result[0] >= 10) {
int[] temp = new int[length+1];
temp[0] = 1;
temp[1] = result[0] - 10;
for (int j = 1;j < length; j++) {
temp[j+1] = result[j];
}
result = temp;
}
return result;
}
/**
* 字符串反转
* @param param 待反转的字符串
* @return 反转之后的字符串
*/
public static String inversion(String param) {
Stack<String> stack = new Stack<String>();
StringBuffer sb = new StringBuffer();
for (int i = 0;i < param.length();i++) {
stack.push(param.substring(i,i+1));
}
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.toString();
}
Java算法面试题及答案
最新推荐文章于 2024-08-16 20:06:06 发布