LeetCode刷题17-转骰子
1 package com.example.demo.leetcode.case202208; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Scanner; 6 import java.util.stream.Collectors; 7 8 /** 9 * 功能描述 10 * 11 * @author ASUS 12 * @version 1.0 13 * @Date 2022/8/6 14 */ 15 public class Main2022080604 { 16 17 /* 18 题目:转骰子 19 【转骰子】骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上, 20 可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次), 21 可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示顺时针旋转90度), 22 现从123456这个初始状态开始,根据输入的动作序列,计算得到最终的状态。骰子的初始状态和初始状态转动后的状态如图所示 23 24 25 输入描述: 输入一行,为只包含LRFBAC的字母序列,最大长度为50,字母可重复 26 输出描述: 输出最终状态 27 28 示例1: 29 输入 30 L R 31 输出 32 1 2 3 4 5 6 33 34 示例2: 35 输入 36 L B 37 输出 38 5 6 1 2 3 4 39 */ 40 41 // 骰子的状态 42 private static List<Integer> dice = new ArrayList<>(); 43 44 // 初始化状态 45 static { 46 for (int i = 1; i <= 6; i++) { 47 dice.add(i); 48 } 49 } 50 51 public static void main(String[] args) { 52 // 获取输入的操作信息 53 Scanner scanner = new Scanner(System.in); 54 String[] operations = scanner.nextLine().split(" "); 55 for (int i = 0; i < operations.length; i++) { 56 // 逐个操作处理 57 operate(operations[i]); 58 } 59 // 打印 60 System.out.print(dice.stream() 61 .map(integer -> String.valueOf(integer)) 62 .collect(Collectors.joining(" ")) 63 ); 64 } 65 66 public static void operate(String str) { 67 68 // 六种情况 l r f b a c 69 // 对于左右翻转 前后的数字状态是不变的 70 if (str.equalsIgnoreCase("L") || str.equalsIgnoreCase("R")) { 71 // 用L表示向左翻转1次 72 int left = dice.get(0); 73 int right = dice.get(1); 74 int up = dice.get(4); 75 int down = dice.get(5); 76 // 初始集合下标代表含义0-左,1-右,2-前(观察者方向),3-后,4-上,5-下 77 if (str.equalsIgnoreCase("L")) { 78 dice.set(0, up); 79 dice.set(1, down); 80 dice.set(4, right); 81 dice.set(5, left); 82 } else { 83 dice.set(0, down); 84 dice.set(1, up); 85 dice.set(4, left); 86 dice.set(5, right); 87 } 88 } 89 90 // 对于前后翻转 左右的数字状态是不变的 91 if (str.equalsIgnoreCase("F") || str.equalsIgnoreCase("B")) { 92 // 用F表示向前翻转1次 93 int forward = dice.get(2); 94 int back = dice.get(3); 95 int up = dice.get(4); 96 int down = dice.get(5); 97 // 初始集合下标代表含义0-左,1-右,2-前(观察者方向),3-后,4-上,5-下 98 if (str.equalsIgnoreCase("F")) { 99 dice.set(2, up); 100 dice.set(3, down); 101 dice.set(4, back); 102 dice.set(5, forward); 103 } else { 104 dice.set(2, down); 105 dice.set(3, up); 106 dice.set(4, forward); 107 dice.set(5, back); 108 } 109 } 110 111 // 对于顺时针、逆时针翻转 上下的数字状态是不变的 112 if (str.equalsIgnoreCase("A") || str.equalsIgnoreCase("C")) { 113 // 用A表示逆时针旋转90度 114 int left = dice.get(0); 115 int right = dice.get(1); 116 int forward = dice.get(2); 117 int back = dice.get(3); 118 // 初始集合下标代表含义0-左,1-右,2-前(观察者方向),3-后,4-上,5-下 119 if (str.equalsIgnoreCase("A")) { 120 dice.set(0, back); 121 dice.set(1, forward); 122 dice.set(2, left); 123 dice.set(3, right); 124 } else { 125 dice.set(0, forward); 126 dice.set(1, back); 127 dice.set(2, right); 128 dice.set(3, left); 129 } 130 } 131 } 132 }
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/16558920.html