Cho 1 mảng arr các số nguyên dương không trùng nhau
Từ số nguyên n ban đầu, với mỗi số x trong mảng arr bạn có thể thay đổi số n thành n+x hoặc n*x. Bài toán đặt ra là, bạn cần thực hiện ít nhất bao nhiêu phép biển đổi để có được số m.
Ví dụ:
- Với n=1, arr=[1,2,3] và m=3 thì kết quả numberSteps(n,arr,m)=1
Bạn có thể có được số 3 từ số 1 sau 1 phép biến đổi theo 2 cách sau:
- Từ số 1, bạn sử dụng x=2 để biến đổi 1 thành 3 thông qua phép +: 1+2=3
- Từ số 1, bạn sử dụng x=3 để biến đổi 1 thành 3 thông qua phép *: 1+2=3
- Với n=0, arr=[1] và m=2 thì kết quả numberSteps(n,arr,m)=2
Bạn thu được số 2 từ số 0 sau 2 phép biến đổi sử dụng phép toán +:
- Đầu tiên, từ số 0, bạn sử dụng x=1 để biến đổi 0 thành 1 thông qua phép +: 0+1=1
- Tiếp theo, từ số 1, bạn sử dụng x=1 để biến đổi 1 thành 2 thông qua phép +: 1+1=2
- Với n=3, arr=[2,3] và m=4 thì kết quả numberSteps(n,arr,m)=-1
Ko có cách nào biến đổi từ 3 thành 4
Đầu vào/đầu ra:
- [Đầu vào] integer n
số nguyên ban đầu
1 <= n <= 10^5
- [Đầu vào] array.integer arr
mảng chứa các số nguyên không trùng nhau dùng để biến đổi số ban đầu
0 <= arr.length() <= 100
0 <= arr[i] <= 10^5
- [Đầu vào] integer m
Số nguyên mong muốn nhận được sau biến đổi
0 <= m <= 10^5
- [Đầu ra] integer
Số bước biến đổi để đạt được số m theo yêu cầu. Nếu ko thể biến đổi được, hãy trả ra đáp án -1