全部博文(306)
分类: C/C++
2012-09-13 15:30:49
若是兄弟,则str1和str2必须最少遍历一遍;若不是兄弟,则可以提前终止遍历。
int func(char *str1, char *str2) { // ASCII nums int i, j, count[128]; char *p1, *p2; p1 = str1; p2 = str2; j = 0; // initial array for(i=0; i<128; i++) count[i] = 0; while('\0' != *p1) { count[*p1++]++; j++; } while('\0' != *p2) { count[*p2]--; j--; if(j < 0 || count[*p2] < 0) return 0; p2++; } // check 0 for(i=0; i<128; i++) { if(count[i] != 0) return 0; } return 1; } |
1分2分5分的硬币,组成1角,共有多少种组合。
一个O(1)的算法吧,欢迎大家讨论
// n:钱数,单位:"角"
int f(int n)
{
return 5*n*n+4*n+1;
}