一道腾讯面试题
偶然看到一道腾讯面试题:
题目:给定一个8*8的方格子,如下图所示,求A点到B点的最短路径有多少条?用算法实现。

想出了一种很简单的方法解决这个问题,A点到B点的最短路径肯定是16,其中8步横走,8步竖走,设横走为'1',竖走为'0',那么最短路径是一个16位的二进制字符串。只要一个16位二进制字符串里面有8个'1',或者8个'0',那么这个二进制字符串就是一条可行的最短路径。
0000000000000000=0
1111111111111111=65535
把0~65535之间的每一个数字转换成二进制字符串,再数其中'1'或者'0'的个数是否是8,就可以判断是不是一条可行的最短路径。
package Transfer;
public class findNumber {
static int num=0;
static String s;
public static void main(String[] args) {
for (int i=0; i<65536; i++){
s = Integer.toBinaryString(i);
if (isRight(s)){
num++;
System.out.println(s);
}
}
System.out.println("解的数量为:" + String.valueOf(num));
}
static boolean isRight(String s){
boolean res = false;
int x=0;
char c;
for(int i=0; i<s.length(); i++){
c = s.charAt(i);
if (c == '1')
x++;
}
if (x == 8)
res = true;
return res;
}
}
运行结果:

浙公网安备 33010602011771号