कोड के पीछे मुख्य विचार यह है निम्नलिखित: " प्रत्येक चरण पर ways
i
को दिए गए पैसे की राशि [1,...coin]
"बदलने के तरीके हैं।
तो पहले पुनरावृत्ति पर आपके पास 1
के मूल्य के साथ केवल एक सिक्का है। मेरा मानना है कि यह देखना स्पष्ट है कि किसी भी लक्ष्य के लिए केवल इन सिक्कों के साथ बदलाव करने का एक ही तरीका है। इस चरण पर ways
सरणी [1,...1]
की तरह दिखेगी (0
से target
तक सभी लक्ष्यों के लिए केवल एक ही रास्ता)।
अगले चरण में हम सिक्कों के पिछले सेट में 2
के मूल्य के साथ एक सिक्का जोड़ते हैं। अब हम गणना कर सकते हैं कि प्रत्येक लक्ष्य के लिए 0
से target
तक कितने परिवर्तन संयोजन हैं। जाहिर है, संयोजन की संख्या केवल लक्ष्यों के लिए बढ़ेगी> = 2
(या सामान्य मामले में नया सिक्का जोड़ा गया)। तो एक लक्ष्य के लिए 2
बराबर संयोजनों की संख्या ways[2](old)
+ ways[0](new)
होगी। आम तौर पर, हर बार जब i
एक नया सिक्का पेश किया जाता है, तो हमें संयोजनों की पिछली संख्या में 1
जोड़ने की आवश्यकता होती है, जहां एक नया संयोजन केवल एक सिक्का से ही होगा।
target
>2
के लिए, जवाब है "target
राशि के सभी संयोजनों coin
से भी कम समय सभी सिक्के होने" और "coin
राशि के सभी संयोजनों सभी सिक्के coin
खुद की तुलना में कम होने" की राशि शामिल होंगे।
यहां मैंने दो बुनियादी चरणों का वर्णन किया है, लेकिन मुझे उम्मीद है कि इसे सामान्य बनाना आसान है।
मुझे आप target = 4
और coins=[1,2]
के लिए एक कम्प्यूटेशनल पेड़ दिखा:
तरीके [4] को देखते हुए सिक्के = [1,2] =
तरीके [4] को देखते हुए सिक्के = [1] + तरीके [2] को देखते हुए सिक्के = [1,2] =
1 + तरीके [2] को देखते हुए सिक्के = [1] + तरीके [0] को देखते हुए सिक्के = [1,2] =
1 + 1 + 1 = 3
तो परिवर्तन देने के तीन तरीके हैं: [1,1,1,1], [1,1,2], [2,2]
।
ऊपर दिया गया कोड रिकर्सिव समाधान के बराबर है। यदि आप the recursive solution समझते हैं, तो मुझे लगता है कि आप ऊपर दिए गए समाधान को समझते हैं।