算法导论里问题解答
Posted Ray幸福的生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法导论里问题解答相关的知识,希望对你有一定的参考价值。
思路: 两个二进制数相加 如: 101 +11 = 1000
private static final int[] a = 1, 0, 1 ;
private static final int[] b = 1, 1 ;
答案应该是:1000
分析:如果按照正常的加法,我们得从数组的末尾开始计算,但是这样会使数组的索引处理出现问题,稍微有些复杂,所以我想把数组先倒叙,再把数组相加,相加后再倒叙回来,这样问题会简单许多。
下面仅仅提供一个思路:
<pre name="code" class="java"> private static int[] Add(int[] a2, int[] b2)
int minLen = 0;
int maxLen = 0;
int[] maxArr = null;
int[] minArr = null;
if (a2.length > b2.length)
minLen = b2.length;
maxLen = a2.length;
maxArr = a2;
minArr = b2;
else
maxLen = b2.length;
minLen = a2.length;
maxArr = b2;
minArr = a2;
int[] newArr = new int[maxLen + 1];
/**
* 先把数组倒叙
*/
maxArr = revArr(maxArr);
printArr(maxArr);
minArr = revArr(minArr);
printArr(minArr);
// 是否有进制
boolean isCanUp = false;
for (int i = 0; i < maxLen + 1; i++)
if (i < minLen)
if (isCanUp)
if (maxArr[i] + minArr[i] + 1 >= 2)
newArr[i] = (maxArr[i] + minArr[i] + 1) % 2;
isCanUp = true;
else
newArr[i] = maxArr[i] + minArr[i];
isCanUp = false;
else
if (maxArr[i] + minArr[i] >= 2)
newArr[i] = (maxArr[i] + minArr[i]) % 2;
isCanUp = true;
else
newArr[i] = maxArr[i] + minArr[i];
isCanUp = false;
else if (i < maxLen)
if (isCanUp)
if (maxArr[i] + 1 >= 2)
newArr[i] = (maxArr[i] + 1) % 2;
isCanUp = true;
else
newArr[i] = maxArr[i] + 1;
isCanUp = false;
else
newArr[i] = maxArr[i];
isCanUp = false;
else
if (isCanUp)
newArr[i] = 1;
else
newArr[i] = 0;
printArr(newArr);
int[] arr = revArr(newArr);
printArr(arr);
return arr;
数据算法对于这种简单的算法技巧性要求比较高,正这来不行,就反过来。
以上是关于算法导论里问题解答的主要内容,如果未能解决你的问题,请参考以下文章