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语言是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持结构...
字符串的全排列和组合算法是计算机科学中的一种...在实际应用中,它们常用于解决各种排序和组合问题,特别是在数据结构和算法的面试中,这类问题的出现频率很高。通过深入理解并实践这些算法,可以提高问题解决的能力。
首先选择一个元素作为排列的第一个元素,然后对剩下的元素进行递归全排列。当长度减到1时,输出当前排列。具体实现如下: ```cpp void permute(char *perm, int first, int length){ if(length ){ for(int i=0;...
- 问题1:字符串的全排列,可以通过回溯算法实现,每次选择未使用的字符并递归到下一层。 - 问题2:字符串的组合,可以使用递归或者动态规划。递归方法中,每次可以选择使用当前字符或者跳过它。 5. **打靶问题**...
- **全排列问题**:对于给定的一组数字,找出所有可能的排列组合。此问题可以通过回溯算法来解决。 #### 四、总结 准备ASP.NET面试时,不仅要熟悉技术细节,还需要能够清晰地表达这些概念。此外,练习实际的编码...
在C++编程中,LeetCode是一个非常受欢迎的在线平台,用于练习和提升...通过学习和实践这个题目的解法,开发者可以深化对C++编程的理解,提高解决实际问题的能力,同时为准备LeetCode等算法竞赛或面试做好充分的准备。
16. **全排列**:通过递归实现,回溯过程中需要恢复原始数组状态。 17. **N个骰子出现和为m的概率**:可以用动态规划计算,dp[i]表示i个骰子掷出总和为m的概率。 18. **海量数据问题**:通常涉及数据压缩、分布式...
这些面试题涵盖了链表操作、树的遍历以及字符串的全排列等核心数据结构和算法概念,这些都是软件工程师面试中常见的问题。理解和熟练掌握这些知识不仅有助于通过面试,而且在实际开发中也有很大的应用价值。
3. 字符串全排列(迅雷笔试题):这道题涉及到经典的全排列问题,考生需掌握递归或回溯法解决这类问题,理解如何生成一个字符串的所有可能排列。 4. 某大公司的两道笔试题:此类题目可能涵盖动态规划、贪心策略、...
这是一个全排列问题,通过递归方法,对每个未处理的字符,将其插入到已排列部分的所有位置,并标记该字符为特殊字符以避免重复。 5. **字符串转换为长整型**: atol函数用于将字符串转换为长整型。首先检查字符串...
- **知识点**: 字符串操作、全排列算法。 - **应用场景**: 给定一个字符串,打印出该字符串中字符的所有排列。 ### 29. 调整数组顺序使奇数位于偶数前面 - **知识点**: 数组操作、双指针技巧。 - **应用场景**: 将...
1. 字符串全排列: 这个题目是要求实现一个函数,生成给定字符串所有可能的排列组合。这里使用了递归算法,通过删除字符串中的一个字符并将其添加到当前缓冲区,然后对剩余部分进行相同的操作,最终得到所有排列。...
通过解答微软的面试题,你可以提升自己在这些领域的理解和应用能力。在实际编程中,掌握这些算法可以帮助你编写出更高效、更优化的代码,从而解决实际工程问题。因此,这些题目不仅适用于面试准备,也是提升个人编程...
在面试过程中,贪心算法和回溯算法是一种常见的问题,了解这些算法的思想和应用场景对于前端开发者来说非常重要。 一、贪心算法 贪心算法是一种算法设计思想,其期待每一个阶段都是局部最优的选择,从而达到全局...
全排列问题在面试和编程竞赛中经常出现,理解并掌握递归法和回溯法是提升编程能力的重要步骤。通过上述代码,我们可以看到C++如何优雅地解决这类问题。无论选择哪种方法,关键在于理解问题的本质,并灵活运用算法来...
10. 全排列和组合:全排列可采用回溯法,组合则可以使用递归或动态规划。 11. 均匀分布问题:可以使用一致性哈希算法,保证负载的均匀分布,多层之间同样适用。 12. 数字序列问题:可以采用位操作,逐位检查并交换...
【数据结构与算法面试常见问题】 1. **链表反转**:题目中提供了两种方法来反转链表。第一种是循环算法,...在实际面试中,还需要结合具体场景灵活应用,并理解各种算法的时间复杂度和空间复杂度,以优化解决方案。