如何解决给定N个红色糖果和M个蓝色糖果找出并排放置不超过K个相同颜色的K糖果的布置的数量?
我了解的是,我们需要找到N + M的所有排列。 我坚持认为这可以帮助任何人在这里使用哪种数据结构。
static String[] getper(String str) {
// Todo Auto-generated method stub
if (str.length() == 0) {
String arr[] = { "" };
return arr;
}
char c = str.charat(0);
String restOfString = str.substring(1);
String[] rr = getper(restOfString);
int k = 0;
String result[];
// create array,not the base case
if (rr.length == 1 && rr[0] == "") {
result = new String[1];
} else {
result = new String[(rr[0].length() + 1) * rr.length];
}
for (int i = 0; i < rr.length; i++) {
System.out.println("for value:" + rr[i] + " inserting:" + c);
for (int j = 0; j <= rr[i].length(); j++) {
result[k] = rr[i].substring(0,j) + c + rr[i].substring(j);
k++;
}
}
return result;
}```
解决方法
为大的M
和N
生成大量的所有组合是不现实的。
但是我们可以计算出没有K+1
个相似糖果的情况下的变体数量。
为红色和蓝色糖果制作大小为(N+M+1)x(N+1)x(K+1)
和(N+M+1)x(M+1)x(K+1)
的桌子。
条目Red[i][r][j]
包含长度为i
的良好序列,最后以j
个红色糖果使用r
红色糖果结尾(我们需要限制红色糖果的总数)由N
)
类似于Blue[i][b][j]
我们可以计算出Red[i][r][j]
存在多少个好序列,向Blue[i-1][i-1-b-1]
行的任何单元格添加一个红色糖果。另外,我们可以为单元格Red[i-1][r-1][j<K]
添加一个红色糖果(所有以K
红色结尾的红色糖果)。
逐层填充红色和蓝色表,最后一层(Red[N+M] and Blue[N+M]
)的总和是变体的数量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。