算法导论里问题解答

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;
	


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

以上是关于算法导论里问题解答的主要内容,如果未能解决你的问题,请参考以下文章

《算法导论》第六章 练习题 Exercise

算法导论第四版学习——习题一Percolation

python 包含汉字的文件读写之每行末尾加上特定字符

二叉树的遍历 《算法导论》10.4-1~10.4-3

算法导论中,为啥合并排序的递归树的高度为lgn?

计算机科学和PYTHON编程导论 week1