移动零
给一个数组 nums 写一个函数将 0
移动到数组的最后面,非零元素保持原数组的顺序
方法一:
public void moveZeroes(int[] nums) {
// Write your code here
List<Integer> list1 = new LinkedList<>();
List<Integer> list2 = new LinkedList<>();
List<Integer> list3 = new LinkedList<>();
for (int i = 0; i < nums.length; i++) {
if(nums[i] !=0){
list1.add(nums[i]);
}else {
list2.add(nums[i]);
}
}
list3.addAll(list1);
list3.addAll(list2);
for (int i = 0; i < list3.size(); i++) {
nums[i] = list3.get(i);
}
}
方法二:
public static void moveZeros(int[] nums){
int len = nums.length;
int[] zeroArray = new int[len];
int index = 0;
for (int i = 0; i < len; i++) {
if(nums[i]!=0){
zeroArray[index] = nums[i];
index++;
}
}
nums = zeroArray;
}
反转字符串
给定一个字符串S和一个整数k,每2k段反转其前k个字符,剩余的字符串如果长度达不到k,则全部反转,若达到k却小于2k,则只反转前k个字符。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int k = sc.nextInt();
int length = s.length();
int num = length/(2*k);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < num; i++) {
//反转部分
String subString = s.substring(k*i,k*(i+1));
StringBuffer temp = new StringBuffer(subString);
sb.append(temp.reverse());
String noreverse = s.substring(k*(i+1),2*k*(i+1));
System.out.println(noreverse);
sb.append(noreverse);
}
String end = s.substring(2*k*num,length);
if(end.length()<=k){
//直接反转
sb.append(new StringBuffer(end).reverse());
}else {
//反转前k个
String temp = end.substring(0,k);
sb.append(new StringBuffer(temp).reverse());
String last = end.substring(k,end.length());
sb.append(new StringBuffer(last));
}
System.out.println(sb.toString());
}
}
注意:substring(startIndex,endIndex)这个方法,这里一定要注意,startIndex确实是指在字符串中的起始位置,但是endIndex却不是在字符串中的末尾位置,endIndex-1才是
字符串反转
public static void main(String[] args) {
String s = "Hello";
char[] reverseArray = new char[s.length()];
int j = 0;
for (int i = s.length()-1; i >=0 ; i--) {
reverseArray[j] = s.charAt(i);
j++;
}
System.out.println(reverseArray);
}