/* 題目描述 有一個int數組arr其中只含有一、2和3,分別表明全部圓盤目前的狀態,1表明左柱,2表明中柱,3表明右柱,arr[i]的值表明第i+1個圓盤的位置。好比,arr=[3,3,2,1],表明第1個圓盤在右柱上、第2個圓盤在右柱上、第3個圓盤在中柱上、第4個圓盤在左柱上。若是arr表明的狀態是最優移動軌跡過程當中出現的狀態,返回arr這種狀態是最優移動軌跡中的第幾個狀態。若是arr表明的狀態不是最優移動軌跡過程當中出現的狀態,則返回-1。 給定一個int數組arr及數組的大小n,含義如題所述,請返回一個int,表明所求的結果。 測試樣例: [3,3] [1] [ 2 ] __________________ [ 1 ] [ 2 ] [ 3 ] 返回:3 */ class Hanoi { public: int process(vector<int> arr,int i,int from,int mid ,int to) { if(i == -1) { return 0; } if(arr[i] != from && arr[i] != to) { return -1; } else if(arr[i] == from) { return process(arr,i-1,from,to,mid); } else { int ret = process(arr,i-1,mid,from,to); if(ret == -1) { return -1; } return (1<<i)+ret; } } int chkStep(vector<int> arr, int n) { int left = 1; int mid = 2; int right = 3; return process(arr,n-1,left,mid,right); } }; /* http://www.nowcoder.com/practice/b2d552cd60b7415fad2612a32e799812?tpId=49&tqId=29342&rp=4&ru=/ta/2016test&qru=/ta/2016test/question-ranking */