建房子
第一个月建一个红“R"房子,后面的每一个月在新建的房子左边建一个绿"G"房子右边见一个"R"房子
输入:N个月
输出:N个月后街道上的房子排列
例子:
输入:1
输出:R
输入:2
输出:GRR
输入:3
输出:GGRRGR
static String buildingHouse(String n) { int N = 1; try { N = Integer.parseInt(n); } catch (NumberFormatException e) { return "N"; } if (N < 1 || N > 12) { return "O"; } return build(N, "R"); } static String build(int round, String H) { if (round == 1) { return H; } String ret = build(round-1, "G") + H + build(round-1, "R"); return ret; }
递归就完事了,和建括号差不多
找被污染的包
输入:第一行是被污染的包,后面的所有行是包的依赖关系,2,3,6
表示2依赖于3和6
输出:找出所有受到影响的包的和
例子:
输入:
4
1,2
2,3,6
3,4,5,6
6,2,4
8,9
10
输出:12
受影响的是1,2,3,6加起来为12
邻接表BFS
import java.util.*; public class Ctrip2 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int source = cin.nextInt(); cin.nextLine(); HashMap<Integer, LinkedList> graph = new HashMap<>(); while (cin.hasNextLine()) { String[] line = cin.nextLine().split(","); int N = line.length; int[] int_line = new int[N]; for (int i=0; i < N; i++) { int_line[i] = Integer.parseInt(line[i]); } int influenced = int_line[0]; for (int i=1; i < N; i++) { int key = int_line[i]; LinkedList<Integer> link = graph.getOrDefault(key, new LinkedList<Integer>()); link.add(influenced); graph.put(key, link); } } System.out.println(sumPollutants(graph, source)); } public static int sumPollutants(HashMap<Integer, LinkedList> graph, int src) { if (!graph.containsKey(src)) { return -1; } Queue<Integer> q = new LinkedList<>(); HashSet<Integer> visited = new HashSet<>(); q.offer(src); visited.add(src); while (!q.isEmpty()) { int size = q.size(); for (int i=0; i < size; i++) { int curr = q.poll(); if (!graph.containsKey(curr)) { continue; } LinkedList<Integer> children = graph.get(curr); for (Integer child: children) { if (visited.contains(child)) { continue; } q.offer(child); visited.add(child); } } } int sum = 0; for (Integer v: visited) { sum += v; } return sum - src; } }
全部评论
(7) 回帖