给一个数不包含前导0的数n,现在将n的各位数字的顺序重组,在这些数中,有多少个数是m的倍数? 例如112,重组后有三个数:112,121,211
区块链毕设网qklbishe.com为您提供问题的解答
给一个数不包含前导0的数n,现在将n的各位数字的顺序重组,在这些数中,有多少个数是m的倍数?
例如112,重组后有三个数:112,121,211
暴力回溯 超时 这数据太大了 import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main{ static int count = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String[] s = str.split(" "); char[] ch = s[0].toCharArray(); Arrays.sort(ch); int m = Integer.parseInt(s[1]); //int count = 0; boolean[] used = new boolean[ch.length]; ArrayList<Character> path = new ArrayList<>(); backtracking(ch, used, path, m); System.out.println(count); } public static void backtracking(char[] ch, boolean[] used, ArrayList<Character> path, int m) { if(path.size() == ch.length) { if(path.get(0) == '0') return; StringBuilder bui = new StringBuilder(); for(Character c : path) { bui.append(c); } int ss = Integer.parseInt(bui.toString()); if(ss % m == 0) count++; //System.out.println(count); return; } for (int i = 0; i < ch.length; i++) { if (i > 0 && ch[i] == ch[i - 1] && used[i - 1] == false) { continue; } //如果同⼀树⽀nums[i]没使⽤过开始处理 if (used[i] == false) { used[i] = true;//标记同⼀树⽀nums[i]使⽤过,防止同一树枝重复使用 path.add(ch[i]); backtracking(ch, used, path, m); path.remove(path.size() - 1);//回溯,说明同⼀树层nums[i]使⽤过,防止下一树层重复 used[i] = false;//回溯 } } } }
编辑于 今天 16:38:44
以上就是关于问题给一个数不包含前导0的数n,现在将n的各位数字的顺序重组,在这些数中,有多少个数是m的倍数?
例如112,重组后有三个数:112,121,211的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训