9个数1-9组成三个数,如:327 654 981,每个数字只能用一次,每三个数字组成一个新的数字,第二个数是第一个数的两倍,第三个数是第一个数的三倍,用程序实现。
package com.ll.test;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class T1 {
/**
* @param args
*/
public static void main(String[] args) {
List<Integer> l = new ArrayList<Integer>();
l.add(1);
l.add(2);
l.add(3);
l.add(4);
l.add(5);
l.add(6);
l.add(7);
l.add(8);
l.add(9);
List<Integer> t = new ArrayList<Integer>();
T1 a = new T1();
a.fullPermutation(l, t);
}
public void fullPermutation(List<Integer> list, List<Integer> temp) {
if (temp.size() == 9) {
checkNumList(temp);
return;
}
for (int i = 0; i < list.size(); i++) {
List<Integer> newlist = new LinkedList<Integer>(list);
List<Integer> newTemp = new LinkedList<Integer>(temp);
newTemp.add(newlist.get(i));
newlist.remove(i);
fullPermutation(newlist, newTemp);
}
}
public void checkNumList(List<Integer> temp) {
int n1 = new Integer(temp.get(0) + "" + temp.get(1) + "" + temp.get(2));
int n2 = new Integer(temp.get(3) + "" + temp.get(4) + "" + temp.get(5));
int n3 = new Integer(temp.get(6) + "" + temp.get(7) + "" + temp.get(8));
if (n1 == n3 * 3 && n2 == n3 * 2)
System.out.println(n1 + " " + n2 + " " + n3);
}
}
分享到:
相关推荐
全排列问题是一个经典的回溯算法应用,对于理解和掌握递归及回溯策略至关重要。 全排列问题要求找到一个给定集合的所有可能的排列组合。例如,如果输入的数字集合是[1, 2, 3],所有可能的排列就是[1, 2, 3], [1, 3,...
全排列问题是找出所有可能的排列组合,递归可以用于生成所有可能的序列,每次递归选择一个未使用的元素放到当前位置,然后对剩余元素进行递归。 9. **生成组合.cpp**: 组合问题是在不考虑顺序的情况下,从一组元素...
全排列问题的解决方案不仅可以用于LeetCode的练习,还能在实际项目中找到应用,例如在生成所有可能的密码组合、进行数据分析时的组合优化等问题。通过理解和掌握这种算法,开发者可以提升解决问题的能力,更好地应对...
全排列问题是一个经典的回溯算法应用,对于学习C语言编程和算法设计具有很高的价值。 首先,我们要理解C语言的基本概念。C语言是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持结构...
字符串的全排列和组合算法是计算机科学中的一种...在实际应用中,它们常用于解决各种排序和组合问题,特别是在数据结构和算法的面试中,这类问题的出现频率很高。通过深入理解并实践这些算法,可以提高问题解决的能力。
此外,递归和回溯也是面试中常见的题目类型,例如八皇后问题、N皇后问题、全排列等。书中将深入讲解如何设计递归函数和如何避免重复计算。 书中的源代码文件“BookCode”包含了所有这些问题的实现,这为读者提供了...
首先选择一个元素作为排列的第一个元素,然后对剩下的元素进行递归全排列。当长度减到1时,输出当前排列。具体实现如下: ```cpp void permute(char *perm, int first, int length){ if(length ){ for(int i=0;...
- 问题1:字符串的全排列,可以通过回溯算法实现,每次选择未使用的字符并递归到下一层。 - 问题2:字符串的组合,可以使用递归或者动态规划。递归方法中,每次可以选择使用当前字符或者跳过它。 5. **打靶问题**...
在C++编程中,LeetCode是一个非常受欢迎的在线平台,用于练习和提升...通过学习和实践这个题目的解法,开发者可以深化对C++编程的理解,提高解决实际问题的能力,同时为准备LeetCode等算法竞赛或面试做好充分的准备。
16. **全排列**:通过递归实现,回溯过程中需要恢复原始数组状态。 17. **N个骰子出现和为m的概率**:可以用动态规划计算,dp[i]表示i个骰子掷出总和为m的概率。 18. **海量数据问题**:通常涉及数据压缩、分布式...
这些面试题涵盖了链表操作、树的遍历以及字符串的全排列等核心数据结构和算法概念,这些都是软件工程师面试中常见的问题。理解和熟练掌握这些知识不仅有助于通过面试,而且在实际开发中也有很大的应用价值。
3. 字符串全排列(迅雷笔试题):这道题涉及到经典的全排列问题,考生需掌握递归或回溯法解决这类问题,理解如何生成一个字符串的所有可能排列。 4. 某大公司的两道笔试题:此类题目可能涵盖动态规划、贪心策略、...
这是一个全排列问题,通过递归方法,对每个未处理的字符,将其插入到已排列部分的所有位置,并标记该字符为特殊字符以避免重复。 5. **字符串转换为长整型**: atol函数用于将字符串转换为长整型。首先检查字符串...
这是典型的排列问题,可以理解为全排列问题,用递归或循环实现。 2. **条件判断与数学逻辑**: - 利润提成问题涉及条件判断和数学计算。题目中给出了不同利润区间的提成比例,需要通过一系列if...else if...else...
1. 字符串全排列: 这个题目是要求实现一个函数,生成给定字符串所有可能的排列组合。这里使用了递归算法,通过删除字符串中的一个字符并将其添加到当前缓冲区,然后对剩余部分进行相同的操作,最终得到所有排列。...
通过解答微软的面试题,你可以提升自己在这些领域的理解和应用能力。在实际编程中,掌握这些算法可以帮助你编写出更高效、更优化的代码,从而解决实际工程问题。因此,这些题目不仅适用于面试准备,也是提升个人编程...
在面试过程中,贪心算法和回溯算法是一种常见的问题,了解这些算法的思想和应用场景对于前端开发者来说非常重要。 一、贪心算法 贪心算法是一种算法设计思想,其期待每一个阶段都是局部最优的选择,从而达到全局...
全排列问题在面试和编程竞赛中经常出现,理解并掌握递归法和回溯法是提升编程能力的重要步骤。通过上述代码,我们可以看到C++如何优雅地解决这类问题。无论选择哪种方法,关键在于理解问题的本质,并灵活运用算法来...