应该是常数 N的位数时间级别git
个人这个方法超时很严重。。。可是特此记录 费劲巴拉写的。。。spa
超时:code
int atMostNGivenDigitSet(char** D, int DSize, int N) { int *array = (int *)malloc(sizeof(int) * 10); for (int i = 0; i < 10; i ++) array[i] = 0; for (int j = 1; j < 10; j ++) { if (j - 1 < DSize) { char cc = D[j - 1][0]; int c = cc - 48; array[c] = c; } //printf("\n%d",array[j]); } int totalSum = 0; for (int i = 1; i <= N; i ++) { long sum = 0; int num = 0; int x = i; int isFlag = 1; while ( x!= 0) { isFlag = 0; num = x % 10; //末尾数字 sum = sum * 10;//进位 sum += num; x = x / 10; if (array[num] == 0) { isFlag = 1; break; } } if (isFlag == 0) { totalSum ++; } } free(array); return totalSum; } int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!\n"); //[-2,-1] ---> -1 char *s[] = {"1","3","5","7"}; int maxNum = atMostNGivenDigitSet(s, 4, 100); printf("\n%d\n",maxNum); } return 0; }