blob: 6f5cf7d98e680a25be3bfda372f5afbdb8b6f994 (
plain) (
blame)
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
|
#include <stdbool.h>
bool isTrionic(int *nums, int numsSize) {
if (numsSize < 4) {
return false;
}
// 防止[9,4,6,8]
if (nums[0] > nums[1]) {
return false;
}
enum { UP1, DOWN, UP2 } state = UP1;
// 状态机真好玩嘻嘻嘻
for (int i = 0; i < numsSize - 1; i++) {
if (nums[i] == nums[i + 1]) {
return false;
}
if (state == UP1) {
if (nums[i] < nums[i + 1]) {
continue;
} else {
state = DOWN;
}
} else if (state == DOWN) {
if (nums[i] > nums[i + 1]) {
continue;
} else {
state = UP2;
}
} else { // 既不等于UP1, 也不等于DOWN,就等于UP2
if (nums[i] < nums[i + 1]) {
continue;
} else {
return false;
}
}
}
return state == UP2;
}
|