北京米纳科技有限公司面试题

面试时间: 2019-4-20

1. 有一个11位数,如何判断他是否是一个回文数(1234321就是一个回文数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class PalindromeNumber {
public static boolean isPalindrome(int num) {
String str = String.valueOf(num);
for (int i = 0; i < str.length() / 2; i++) {
if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
return false;
}
}
return true;
}

public static boolean isPalindrome2(int num) {
String str = new StringBuilder(num).reverse().toString();
return str.equals(String.valueOf(num));
}

public static boolean isPalindrome3(int num) {
if (num < 0 || (num != 0 && num % 10 == 0)) {
return false;
}
int rev = 0;
while (num > rev) {
rev = rev * 10 + num % 10;
num = num / 10;
}
return (num == rev || num == rev / 10);
}
}

2. n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的哪位?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class NRenShu {
public int isN(int n) {
int m = 3, s = 0;
for (int i = 2; i <= n; ++i) {
s = (s + m) % i;
}
return s + 1;
}

public int isN2(int n) {
int i, p = 0, q;
int[] a = new int[100];
q = n;
// 给数组赋值 1-输入的数字
for (i = 0; i < n; i++) {
a[i] = i + 1;
}
for (i = 0; ; i++) {
if (i == n) {
//当i++一直到n时,肯定有一些没有被选到,比如我们输入8,第一轮是3,6被赋值0,当i=8时,重置i的值继续下一轮
i = 0;
}
if (a[i] != 0) {
//我们下面定义的是当循环到三时,就赋值0,所以这边等0的不考虑在内
p++;
} else {
// 此数已经被删除,跳过
continue;
}
if (p % 3 == 0) {
//这个就是从0一直加,到三的倍数就赋值为0,从而就达到我们的目的
a[i] = 0;
q--;
}
//上面q=n;表明q==n,只有一个为0就减一,为下面做铺垫
if (q == 1) {
break; //当剩下最后一个就输出
}
}
int num = -1;
for (i = 0; i < n; i++) {
if (a[i] != 0) {
num = a[i];
break;
}
}
return num;
}
}