七段码
转载链接:https://blog.csdn.net/VanGotoBilibili/article/details/115575994
这个为填空题,只需计算结果,在代码中使用输出语句输出填空题。
小兰用七段码数码管来表示一种特殊的文字。
图片描述
上图显示了七段码数码管的图表,共有数码管 777 段能发光的二 极管,分别标记为 a,b,c,d,e,f,ga, b, c, d, e, f, ga,b,c,d,e,f,g。
小蓝要选择一部分二极管(至少一个)发光来表达字符。设计字符 所有发光的二极管都需要连接在一起。
例如:bbb 发光,其他二极管不发光可以用来表达一个字符。
例如 ccc 发光,其他二极管不发光可以用来表达一个字符。该方案与上述方案相匹配 尽管看起来相似,但一行方案可以用来表示不同的字符。
例如:a,b,c,d,ea, b, c, d, ea,b,c,d,e 发光,f,gf, gf,g 不发光可以用来表达一个字符。
例如:b,fb, fb,f 发光,其他二极管不发光,因为发光 二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符? 运行限制
最大运行时间:1s 最大运行内存: 128M
- 如何找到字符串的所有子集-递归
- 如何判断连接区域?--------------------------bfs
public class Main{
static int counts=0; static Set<String>set=new HashSet<>(); static Map<String,ArrayList<String>>map=new HashMap<>(); public static void main(String[] args) {
String str="abcdefg"; //初始化 ArrayList<String>list1=new ArrayList<>(); ArrayList<String>list2=new ArrayList<>(); ArayList<String>list3=new ArrayList<>();
ArrayList<String>list4=new ArrayList<>();
ArrayList<String>list5=new ArrayList<>();
ArrayList<String>list6=new ArrayList<>();
ArrayList<String>list7=new ArrayList<>();
list1.add("b");list1.add("f");
list2.add("a");list2.add("g");list2.add("c");
list3.add("b");list3.add("g");list3.add("d");
list4.add("c");list4.add("e");
list5.add("f");list5.add("g");list5.add("d");
list6.add("a");list6.add("g");list6.add("e");
list7.add("f");list7.add("e");list7.add("b");list7.add("c");
map.put("a", list1);
map.put("b", list2);
map.put("c", list3);
map.put("d", list4);
map.put("e", list5);
map.put("f", list6);
map.put("g", list7);
//求字符串的所有字串
find("",str,0);
System.out.println(counts);
}
static void find(String temp,String str,int index) {
if(index==str.length()) {
//最后对得到的字串检查是否是一个连通区域
if(bfsCheck(temp.toCharArray()))counts++;
return;
}
find(temp,str,index+1);
find(temp+=str.charAt(index),str,index+1);
}
static boolean bfsCheck(char[] strs) {
//先对简单情形直接判断
if(strs.length==0)return false;
if(strs.length==1)return true;
if(strs.length==2) {
if(map.get(strs[0]+"").contains(strs[1]+""))return true;
else return false;
}
LinkedList<String> queue=new LinkedList<>();
int connect=1;
queue.add(strs[0]+"");
strs[0]='0';
while(!queue.isEmpty()) {
String str = queue.poll();
ArrayList<String> list = map.get(str);
for(int i=0;i<strs.length;i++) {
if(list!=null&&list.contains(strs[i]+"")) {
connect++;
queue.add(strs[i]+"");
strs[i]='0';
}
}
}
if(connect==strs.length)return true;
return false;
}
}