小猴爬台阶问题

来源:互联网 发布:linux qq rpm最新版 编辑:程序博客网 时间:2024/05/20 18:46

小猴爬台阶问题:

    有一只小猴很顽皮,喜欢爬台阶,但由于小猴太小,所以它只能一步爬1个或2个台阶。请计算该小猴所有可能的爬行路径。


package shuai.study.steps;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;/** * @author shengshu *  */public class MonkeyCrawl {// Get paths, which will be permutatedpublic static Set<String> getPathsSet(int steps) {Set<String> pathsSet = new HashSet<String>();for (int i = 0; i <= steps / 2; i++) {int twoStepSum = i * 2;int oneStepTimes = steps - twoStepSum;StringBuffer pathStringBuffer = new StringBuffer();for (int x = 0; x < oneStepTimes; x++) {// "-" represent one steppathStringBuffer.append("-");}for (int y = 0; y < i; y++) {// "=" represent two stepspathStringBuffer.append("=");}pathsSet.add(pathStringBuffer.toString());}return pathsSet;}// Permutate all possible pathspublic static void permutatePaths(String path, List<String> list) {if (path.length() == 1) {for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i));}System.out.println(path);} else {int index[] = new int[path.length()];for (int i = 0; i < index.length; i++) {index[i] = path.indexOf(path.charAt(i));}for (int i = 0; i < path.length(); i++) {String subPath = path.substring(1, path.length());if (i == index[i]) {list.add("" + path.charAt(0));permutatePaths(subPath, list);list.remove(list.size() - 1);}path = subPath + path.charAt(0);}}}public static void main(String[] args) {// Set steps as 15, or othersSet<String> pathsSet = MonkeyCrawl.getPathsSet(15);Iterator<String> iterator = pathsSet.iterator();while (iterator.hasNext()) {String path = iterator.next();MonkeyCrawl.permutatePaths(path, new ArrayList<String>());}}}


1 0
原创粉丝点击