場(chǎng)景分析
如下代碼是 6 層 for 循環(huán)。
ublic void forSix() {String preFix = "101";String postFix = "11";for (int i = 0; i < 2; i++) {for (int j = 0; j < 2; j++) {for (int k = 0; k < 2; k++) {for (int l = 0; l < 2; l++) {for (int m = 0; m < 2; m++) {for (int n = 0; n < 2; n++) {// operationSystem.out.println(preFix+i+j+k+l+m+n+postFix);}}}}}}}
如果碰到更為復(fù)雜的應(yīng)用場(chǎng)景,可能存在更深層次的嵌套 for 循環(huán),如 10、13層等,乃至于更多。
如何簡(jiǎn)化 for 循環(huán)的層次?可以使用遞歸解決問(wèn)題。
遞歸優(yōu)化
ublic static final String PRE_FIX = "101";public static final String POST_FIX = "11";public final StringBuilder sb = new StringBuilder();
public void simpleFor(int level) {if (level > 6) {return;}for (int i = 0; i < 2; i++) {sb.Append(i);if (level == 6) {System.out.println(PRE_FIX + sb + POST_FIX);}simpleFor(level + 1);sb.deleteCharAt(sb.length() - 1);}}
新的問(wèn)題
以上代碼每一層 for 循環(huán)的數(shù)組都是相同,如果每一層需要循環(huán)的數(shù)組不同該怎么辦?
可以使用 Map<Integer, Integer[]> 保存相關(guān)數(shù)組,索引為 level.
改進(jìn)版遞歸代碼
ublic static final String PRE_FIX = "101";public static final String POST_FIX = "11";public final StringBuilder sb = new StringBuilder();public final Map<Integer, Integer[]> integerMap = new HashMap() {{put(1, new Integer[]{0,1,2,3,4,5,6,7,8,9});put(2, new Integer[]{0,1,2,3,4,5,6,7,8,9});put(3, new Integer[]{0,1,2,3,4,5,6,7,8,9});put(4, new Integer[]{0,1,2,3,4,5,6,7,8,9});put(5, new Integer[]{0,1,2,3,4,5,6,7,8,9});put(6, new Integer[]{0,1,2,3,4,5,6,7,8,9});}};public void simpleForOptimize(int level) {if (level == 7) {return;}Integer[] integers = integerMap.get(level);for (Integer integer : integers) {sb.append(integer);if (level == 6) {System.out.println(PRE_FIX + sb + POST_FIX);}simpleForOptimize(level + 1);sb.deleteCharAt(sb.length() - 1);}}






