假設有一個數字被稱爲開心,如果有任何數字加減的組合,那麼結果是42.
例如:
9999993,999399和399999很高興,因爲9 + 9 + 9 + 9 + 9 - 3 = 42
3783985861也很高興,因爲:3 + 7 + 8 - 3 + 9 + 8 - 5 + 8 + 6 + 1 = 42在C中添加和減去特定值的數字的組合
我的想法:
- 計數給定的數字有多長
- 數組合:2^n種組合| N =號碼長度
- for循環,並檢查所有的組合,以使結果是42 但如何?????
- 做遞歸。我可以通過添加所有數字來完成。但如何檢查所有 組合?
int isHappy(unsigned int aNum){
int count = 0;
while(aNum != 0){
aNum /= 10;
count++;
}
int nTimes = 1;
for(int i=0;i<count;i++){
nTimes = nTimes * 2;
}
for(int i=0;i<nTimes;i++){
????
}
return nTimes;
}
int main(){
printf("%d", isHappy(999993));
return 0;
}
每位數有兩種可能的跡象的和輔助功能。給你一個漂亮的二叉樹,你可以遍歷和回溯遞歸。 –
使用動態編程可以實現O(n^2)解決方案。想想是否有可能獲得特定的前幾位數字的加/減法。創建一個二維數組索引的數字位數和結果。(實際上編輯:O(n^2)) –
只是爲了好玩,請注意整數* x *的base- * b *表示中的位數是O(log * x *),對於任何* b * 。因此,如何描述問題的漸近複雜性很大程度上取決於您如何定義問題的大小。 –