算法导论里问题解答

来源:互联网 发布:sql server分布式 编辑:程序博客网 时间:2024/06/08 16:10

思路: 两个二进制数相加 如: 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;}


数据算法对于这种简单的算法技巧性要求比较高,正这来不行,就反过来。

0 0