import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class CombinationToSum {
/*
第21 题
2010 年中兴面试题
编程求解:
输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,
使其和等于 m , 要求将其中所有的可能组合列出来 .
* two solutions
* permutation01:Recursion.easy to write and read-->pick n or not,haha
* permutation02:put n,then put n-1...if bigger,remove;if smaller,keep putting;if ok,output.
*/
public static void main(String[] args) {
CombinationToSum cts=new CombinationToSum();
//permutation01(int sum,int n)
cts.permutation01(10,10);
System.out.println("===========");
cts.permutation02(10,6);
}
/*Recursion.use Stack<Integer>
we can use ArrayList,too.
private List<Integer> list=new ArrayList<Integer>();
list.add(n);
list.remove(list.indexOf(n));
*/
private Stack<Integer> stack=new Stack<Integer>();
public void permutation01(int sum,int n){
if(n<=0||sum<=0)return;
if(sum==n){
printStack(stack);
System.out.print(n);
System.out.println();
}
stack.add(n);
permutation01(sum-n,n-1);
stack.pop();
permutation01(sum,n-1);
}
public void permutation02(int sum, int n) {
if(n<=0||sum<=0)return;
for (int i = n; i > 0; i--) {
if (i == sum) {
System.out.println(i);
continue;
}
List<Integer> list = new ArrayList<Integer>();
list.add(i);
for (int j = i - 1; j > 0;) {
list.add(j);
int ret = isOK(list, sum);
if (ret < 0) {
j--;
}
if (ret == 0) {
printList(list);
System.out.println();
j = list.get(1) - 1;//now we go back and make the second element smaller
list.clear();
list.add(i);
}
if (ret > 0) {
list.remove(list.size()-1);//too large,remove the last element
j--;
}
}
}
}
// whether the sum of list element equals to sum or not
public static int isOK(List<Integer> list, int sum) {
int re = 0;
int total = 0;
for (int each : list) {
total += each;
}
if (total > sum)
re = 1;
if (total < sum)
re = -1;
return re;
}
public void printStack(Stack<Integer> stack){
/*
while(!stack.isEmpty()){
int temp=stack.pop();
System.out.print(temp+" ");
}
*/
//don't remove the elements in stack
for(Integer each:stack){
System.out.print(each+" ");
}
}
public void printList(List<Integer> list) {
for (int each : list) {
System.out.print(each + " ");
}
}
}
分享到:
相关推荐
《GBase连接驱动详解——基于Java的gbase-connector-8.3.81.53-build52.8-bin》 在IT行业中,数据库管理是至关重要的环节,尤其是在大数据处理领域。GBase是一款高性能、高可用性的分布式数据库系统,尤其在处理大...
我的中兴面试.pdf 中兴、美的9.10面经.pdf 中兴面试.pdf 中兴南京现场技术面.pdf 中兴软件开发(Java)一面.pdf 中兴软开Java面经.pdf 中兴上海软开专业面试+综合面试.pdf 中兴视频一二面-Java软开.pdf 中兴一面.pdf...
【中兴软创Java面试题】是一份2018年的面试资料,涵盖了针对Java开发者在中兴软创面试过程中可能会遇到的问题。这份资源对于准备Java面试,特别是中兴软创公司的面试者来说,是非常宝贵的参考资料。以下是根据这份...
这是目前最新支持安卓11 Recovery 安卓11解密data需要先在Recovery格式化(双清)一下才可以解密。... ---------------------------...1.刷入方法 解压到文件夹 运行 “recovery-twrp一键刷入工具.bat” 按 提示操作即可。
2022中兴硬件笔试题及答案-图文.docx2022中兴硬件笔试题及答案-图文.docx2022中兴硬件笔试题及答案-图文.docx2022中兴硬件笔试题及答案-图文.docx2022中兴硬件笔试题及答案-图文.docx2022中兴硬件笔试题及答案-图文....
本压缩包“网易、腾讯、中兴--Java笔试面试题.zip”包含了三家公司——网易、腾讯、中兴对Java程序员进行笔试和面试时可能会遇到的问题。这三家公司在科技行业内都是知名企业,对技术人才的需求高,因此他们的面试题...
中兴光猫超级密码获取工具
【描述】提到“2018年最新的中兴软创的java面试题-总共经过了两次中兴软创的面试”,暗示了这份资料可能包含两轮面试中遇到的问题,涵盖了初级到进阶的Java知识。这通常意味着面试过程可能涉及了基础语法、数据结构...
在这款设备上启用telnet模式对于高级用户来说是至关重要的,因为它允许进行更深入的设备管理和故障排查。"F673AV9-tools.zip"这个压缩包文件包含了实现这一目标所需的工具。 首先,我们来详细解析压缩包内的三个...
用于获取中兴F650电信光猫的超级密码。
在这个压缩包中,包含了"ZX-PassReader.zip"和"中兴光猫超密获取工具使用方法.png"这两个文件。"ZX-PassReader.zip"是工具本身,而"中兴光猫超密获取工具使用方法.png"则可能是操作指南的图片。 2. **安装与运行**...
中兴光猫超密获取软件可以帮助用户进行光猫密码的获取,但是仅限于电信中兴的,对于这种网络方面感兴趣的用户可以下载一个体验下。 软件介绍 中兴光猫超密获取软件主要功能就是一键获取中国电信中兴光猫的超级密码,...
【标题】"2015校招-中兴软创面试题Java"涉及的是中兴软创公司在2015年校园招聘中的Java面试题目,这通常包括了对Java编程语言、数据结构、算法、软件工程等多个方面的知识考察。对于准备这类面试的应聘者来说,了解...
### 中兴通讯Java面试题知识点解析 #### 1. C++或Java中的异常处理机制的简单原理和应用 - **异常的基本概念**:在Java中,异常是指程序运行时遇到的一些错误状态,这些错误可能是因为代码违反了Java的语义规则而...
中兴中级LTE面试总结-V10.doc 本资源摘要信息涵盖了中兴LTE面试的常见问题总结,旨在帮助LTE面试的题目解答,并对LTE的理论进行重新复习,另外还有助于LTE的优化思路的改善。 一、RSRP和RSRQ的定义和换算方式 ...
例如,TWRP(TeamWin Recovery Project)和CWM(ClockworkMod)是两个非常流行的第三方Recovery,它们提供了图形界面,便于用户更轻松地执行刷机操作。 这个7z文件是一种常见的压缩格式,7-Zip软件可以解压它。解压...
中兴JAVA面试题目 单选择题 1. 编译 Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为 .class。这说明 Java 编译器编译 Java 源程序文件时,会将其转换为平台无关的字节码文件,以便...
冒泡排序是一种简单的排序算法,通过重复遍历要排序的数列,比较相邻两个元素,如果它们的顺序错误就把它们交换过来。 ```c void mpsort(int array[]) { int i, j, a; for (i = 0; i < N - 1; i++) { for (j = 0...
南京-苏慧面试题.doc 南京-乾坤-笔试题--没用.doc 南京-诺思信数据库基础.doc 没有全部列出,想要找工作的朋友不妨看一看,或许有些帮助,希望能让大家有所收获,也祝愿大家能早日找到理想的工作,别忘了多支持哦!
OpenNI_Unity_Toolkit-0.9.7.4.part1