LCR 182.动态口令
题目描述
某公司门禁密码使用动态口令技术。初始密码为字符串 password,密码更新均遵循以下步骤:
设定一个正整数目标值 target
将 password 前 target 个字符按原顺序移动至字符串末尾
请返回更新后的密码字符串。
方法一 字符串截取
public String dynamicPassword(String password, int target) {
return password.substring(target) + password.substring(0,target);
}
方法二 数组拷贝
arraycopy(原数组,目标位置,现数组,起始位置,末位置)
public int[] dynamicArray(int[] arr, int target){
int len =arr.length;
int[] retArr = new int[len];
System.arraycopy(arr,target,retArr,0,len-target);//前面
System.arraycopy(arr,0,retArr,len-target,target);//后面
return retArr;
}
方法三 遍历
public int[] dynamicArray(int[] arr, int target){
int len =arr.length;
int[] retArr = new int[len];
for(int i =0;i<len;i++){
retArr[i] = arr[(i+target)%len];
}
return retArr;
}
方法四 局部反转+全局反转
public int[] dynamicArray(int[] arr, int target){
int len =arr.length;
revert(arr,0,target-1);
revert(arr,target,len-1);
revert(arr,0,len-1);
return arr;
}
public static void revert(int[] arr,int start,int end){
for(int i =start;i<= (end-start)/2+start ;i++){
//i+j =start+end
int j =start +end -i;
int temp =arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}