题目描述
有一组系数向量A和m, AX = m,求所有可能的X。
解题思路:
x1 = 1:m/a[0];组合所有的a[1~a.length-1]X = m-a[0]x1;
代码实现:
(A中不含有0)
import java.util.LinkedList;
public class Main {
//解a[0]+a[1]+..+a[n] = m
//系数不为0
public static void main(String[] args) {
int[] a = new int[3];
for (int i = 0; i < a.length; i++) {
a[i] = i+1;
}
LinkedList<LinkedList<Integer>> list = solution(a,5);
for (LinkedList<Integer> l : list) {
System.out.println(l);
}
}
public static LinkedList<LinkedList<Integer>> solution(int[] a,int m){
if(a.length==1) {
if(m%a[0] != 0)
return null;
LinkedList<Integer> s = new LinkedList<Integer>();
s.add(m/a[0]);
LinkedList<LinkedList<Integer>> list = new LinkedList<LinkedList<Integer>>();
list.add(s);
return list;
}
if(m==0) {
LinkedList<Integer> s = new LinkedList<>();
for (int i = 0; i < a.length; i++) {
s.add(0);
}
LinkedList<LinkedList<Integer>> list = new LinkedList<LinkedList<Integer>>();
list.add(s);
return list;
}
LinkedList<LinkedList<Integer>> list = new LinkedList<LinkedList<Integer>>();
for (int i = 0; i <= m/a[0]; i++) {
int[] s = new int[a.length-1];
for (int j = 0; j < s.length; j++) {
s[j] = a[j+1];
}
LinkedList<LinkedList<Integer>> listI = solution(s,m-a[0]*i);
if(listI != null)
for (LinkedList<Integer> l : listI) {
l.addFirst(i);
list.add(l);
}
}
return list;
}
}