public static void main(String[] args) {
System.out.println(">>> result count:" + method(6, 3))
}
public static int method(int n, int k) {
List<List<Integer>> list = new ArrayList<>()
for (int i = 0 i < k i++) {
if (i == 0) {
for (int j = 1 j < n j++) {
List<Integer> li = new ArrayList<>()
li.add(j)
list.add(li)
}
continue
}
List<List<Integer>> listNew = new ArrayList<>()
for (List<Integer> integers : list) {
for (int j = integers.get(integers.size() - 1) j < n j++) {
List<Integer> li = new ArrayList<>()
li.addAll(integers)
li.add(j)
listNew.add(li)
if (i + 1 == k) {
int res = 0
for (Integer integer : li) {
res += integer
}
if (res != n) {
listNew.remove(li)
}
}
}
}
list.clear()
list.addAll(listNew)
}
for (List<Integer> integers : list) {
for (Integer integer : integers) {
System.out.print(integer + "\t")
}
System.out.println()
}
return list.size()
}
}
import java.util.Arrayspublic class Test {
public static void getCha(int [] a,int []b){
int min =Integer.MAX_VALUE
int sss=0
int kkk = 0
int c = 0
int d = 0
for (int i = 0i <a.lengthi++) {
for (int j = 0j <b.lengthj++) {
int temp = Math.abs(a[i]-b[j])
if(temp<min){
min = temp
sss = a[i]
kkk = b[j]
c=i
d=j
}
}
}
System.out.println("最大差距:"+min+"数组A["+c+"]"+sss+"数组B["+d+"]"+kkk)
}
public static void main(String[] args) {
int []a = new int[8]
int []b = new int[12]
for (int i = 0i <a.lengthi++) {
a[i] = (int)( Math.random()*100)
}
System.out.println(Arrays.toString(a))
for (int i = 0i <b.lengthi++) {
b[i] = (int) (Math.random()*100)
}
System.out.println(Arrays.toString(b))
getCha(a,b)
}
}
有。常见的如下:一是字符串,如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。
二是链表,在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。链表两个著名的应用是栈Stack和队列Queue。
三是树,这里的树通常是指二叉树,每个节点都包含一个左孩子节点和右孩子节点。
四是排序,五是递归vs.迭代。
六是动态规划,动态规划是解决下面这些性质类问题的技术:一个问题可以通过更小子问题的解决方法来解决(即问题的最优解包含了其子问题的最优解,也就是最优子结构性质)。
有些子问题的解可能需要计算多次(也就是子问题重叠性质)。子问题的解存储在一张表格里,这样每个子问题只用计算一次。需要额外的空间以节省时间。爬台阶问题完全符合上面的四条性质,因此可以用动态规划法来解决。