/* 题目描述 有一个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 */