應該是常數 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; }