之前一篇文章讲了http://blog.csdn.net/tcpipstack/article/details/8125759字符串翻转里面的 “杂技算法” 和 “翻转算法” 的C语言实现,最近完成了上述算法的Java实现,具体代码如下所示:
杂技算法源码:
package chapter2; import java.util.ArrayList; import java.util.List; /** * Name:杂技算法 * * @author tcpipstack * @version 1.0 * */ public class AcrobatsArray { public AcrobatsArray() { } public List<String> rotation(List<String> list, int rotdist) { int m = gcd(rotdist, list.size()); int j = 0; for (int i = 0; i < m; i++) { String temp = list.get(i); j = i; while (true) { int k = j + rotdist; if (k >= list.size()) { k -= list.size(); } if (k == i) { break; } list.set(j, list.get(k)); j = k; } list.set(j, temp); } return list; } /** * Name: 求最大公约数(Greatest common divisor) * * @param i * @param j * @return */ private int gcd(int i, int j) { while (i != j) { if (i > j) { i -= j; } else { j -= i; } } return i; } /** * @param args */ public static void main(String[] args) { AcrobatsArray strArr = new AcrobatsArray(); MyList myList = new MyList(); List<String> list = myList.createStringList(10); System.out.println("*****Before*****"); myList.print(list); List<String> result = strArr.rotation(list, 3); System.out.println("\n*****After*****"); myList.print(result); } }
翻转算法源码:
package chapter2; import java.util.ArrayList; import java.util.List; /** * * Name: Inverse the array * * @author tcpipstack * @version 1.0 * */ public class InverseArray { public InverseArray() { } /** * Name: Inverse the elements of the list * * @author long.luo * @param list * @param begin * @param end * @return list */ private List<String> reverseList(List<String> list, int begin, int end) { if (begin <= end) { for (int i = begin; i < end; i++, end--) { if (i < end - 1) { String temp = list.get(i); list.set(i, list.get(end - 1)); list.set(end - 1, temp); } } } return list; } /** * @param args */ public static void main(String[] args) { MyList myList = new MyList(); List<String> list = myList.createStringList(10); System.out.println("*****Before*****"); myList.print(list); InverseArray inverseArray = new InverseArray(); inverseArray.reverseList(list, 0, 5); inverseArray.reverseList(list, 5, 10); inverseArray.reverseList(list, 0, 10); System.out.println("\n*****After*****"); myList.print(list); } } class MyList { public MyList() { } /** * Name:产生String类型的list * * @author long.luo * @param length * @return */ public List<String> createStringList(int length) { List<String> list = new ArrayList<String>(); for (int i = 0; i < length; i++) { list.add(String.valueOf(i)); } return list; } /** * Name:print the list elements * * @author long.luo * @param list */ public void print(List<String> list) { for (int i = 0; i < list.size(); i++) { System.out.printf(" " + list.get(i)); } } }