No21、(数组)
来源:互联网 发布:python高性能编程 编辑:程序博客网 时间:2024/06/07 23:37
2010年中兴面试题
编程求解:
输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.
编程求解:
输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
使其和等于 m ,要求将其中所有的可能组合列出来.
解题思路:
乍一看还是挺吓人的...仔细想一下,在任意一个组合中,数列中的每一个数字都只有两种情况,加入组合或者不加入组合..这样我们可以从第一个数字开始递归,第一个数字有两种情况,加入或不加入,然后根据不同的情况改变递归条件,达到递归终止条件的时候就可以输出结果..
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;public class Q21 {public static void getResult(int now,int n,int m,ArrayList<Integer> record,int sum) //now代表递归到now的时候{if(sum == m) //达到递归条件,输出{System.out.println(record.toString());return;}if(now > n || sum > m) //超出递归条件或者再往下递归也没有什么必要了,就终结递归 return;if(sum < m){getResult(now+1, n, m, record, sum); //该数字不加入组合if(now != 0){record.add(now); getResult(now+1, n, m, record, sum+now); //该数字加入组合record.remove(record.size()-1);}}}public static void main(String[] args) throws Exception {InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);System.out.println("Input m:");int m = Integer.parseInt(br.readLine());System.out.println("Input n:");int n = Integer.parseInt(br.readLine());int sum = 0;ArrayList<Integer> record = new ArrayList<Integer>();getResult(0, n, m, record, sum);}}
- No21、(数组)
- <MEMORY>Project Euler NO21
- 【LeetCode从零单排】No21.MergeTwoSortedLists
- leetcode No21. Merge Two Sorted Lists
- 【leetcode每日一题】NO21.Merge Two Sorted Lists
- 数组的数组(变长数组)
- 交错数组 (齿轮数组、数组中的数组)
- 数组(一维数组)
- vba 数组(动态数组)
- 对象数组(动态数组)
- 零长数组(柔性数组)
- 变长数组(动态数组)
- 数组反转(整型数组)
- 数组(2)二维数组
- 数组(4)数组排序
- 类数组(伪数组)
- 数组(三)--打印数组
- 数组(十)--二维数组
- VB导图2.0
- 六、C++ this 指针
- web设计师经验之谈
- 错误的结果2......VC/bin/cl.exe返回的最终解决方案
- linux下lseek()函数理解
- No21、(数组)
- KM算法(2)
- app推广方法大全
- 折半查找法C++
- 如何在C代码中调用C++非成员函数
- 以下是做项目中的一些资料(关于js操作excel)
- EntityFramework学习笔记3-VS2010安装EF5.0
- Debug Error
- Java——用户界面的布局