上一篇
Java如何计算三位数排列组合
- 后端开发
- 2025-06-15
- 4860
计算三位数的组合:无重复数字时,首位从1-9选(9种),第二位从0-9排除首位(9种),第三位排除前两位(8种),总计9×9×8=648种组合。
无重复数字的三位数组合
指百位、十位、个位上的数字均不重复(如123、907),且百位不能为0。
数学原理:
- 百位可选范围:1-9(9种)
- 十位可选范围:0-9(排除百位已选数字,9种)
- 个位可选范围:0-9(排除百位和十位已选数字,8种)
总组合数 = 9 × 9 × 8 = 648。
Java代码实现
import java.util.ArrayList; import java.util.List; public class ThreeDigitCombinations { public static void main(String[] args) { List<Integer> combinations = new ArrayList<>(); // 百位:1-9 for (int i = 1; i <= 9; i++) { // 十位:0-9(排除百位) for (int j = 0; j <= 9; j++) { if (j == i) continue; // 跳过重复 // 个位:0-9(排除百位和十位) for (int k = 0; k <= 9; k++) { if (k == i || k == j) continue; int number = i * 100 + j * 10 + k; combinations.add(number); } } } // 输出结果 System.out.println("无重复数字的三位数总数: " + combinations.size()); System.out.println("前10个示例: " + combinations.subList(0, 10)); } }
输出:
无重复数字的三位数总数: 648
前10个示例: [102, 103, 104, 105, 106, 107, 108, 109, 120, 123]
有重复数字的三位数组合
指允许数字重复(如112、200),但百位不能为0。
数学原理:
- 百位可选范围:1-9(9种)
- 十位可选范围:0-9(10种)
- 个位可选范围:0-9(10种)
总组合数 = 9 × 10 × 10 = 900(即所有100-999的三位数)。
Java代码实现
import java.util.ArrayList; import java.util.List; public class ThreeDigitCombinations { public static void main(String[] args) { List<Integer> combinations = new ArrayList<>(); // 百位:1-9 for (int i = 1; i <= 9; i++) { // 十位:0-9(允许重复) for (int j = 0; j <= 9; j++) { // 个位:0-9(允许重复) for (int k = 0; k <= 9; k++) { int number = i * 100 + j * 10 + k; combinations.add(number); } } } // 输出结果 System.out.println("有重复数字的三位数总数: " + combinations.size()); System.out.println("前10个示例: " + combinations.subList(0, 10)); } }
输出:
有重复数字的三位数总数: 900
前10个示例: [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
关键说明
- 百位不为0:三位数的百位必须是1-9,否则不是有效三位数。
- 组合与排列:数学中“组合”指无序选择(如C(10,3)=120),但本文针对实际需求(生成具体三位数),使用有序排列实现。
- 性能优化:直接使用三重循环(时间复杂度O(n³))在本题中可行(仅900次迭代),无需递归或复杂算法。
通过以上代码,可灵活生成无重复或有重复数字的三位数组合,适用于密码生成、数学计算等场景。
引用说明:
本文代码基于Java基础语法实现,数学原理参考组合数学中的排列概念。