1.K个一组翻转链表
题目描述:
给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
输入描述
:
第一行:依次输入链表中的各个元素,以"#"结束
第二行:每组数量k
输出描述:
处理后的链表中的各个元素,以"->"连接
输入例子
1:
1 2 3 4 5 #
2
输出例子1:
2->1->4->3->5
🍁题目解析
1.从输入例子得知,我们需要两组输入,一组以字符串的形式,另一组以整数的形式。
2. k 个一组翻转,最后不够 k 个的时候,就不需要翻转了。
3. 输出需要拼接 "->",注意最后有一个 "#"。
解题思路
🍃1.我们需要针对输入的字符串做处理,输入的字符串带空格,我们需要先去空格,另外翻转链表,需要不断的进行两两交换,那么就需要将字符串转成数组。
🍃2.然后通过一个变量 start 来控制每一组的头结点。
🍃3.循环结束的条件:start + k - 1 < str.length - 1,因为最后一个元素是 "#",所以不能取等号。
代码示例
public class Demo2 {
// 翻转函数
public static void reverse(String[] str,int start,int end) {
while(start < end) {
String tmp = str[start];
str[start] = str[end];
str[end] = tmp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
// 输入的字符串带空格,先做去空格处理
String[] str = s.split(" ");
int k = scanner.nextInt();
int start = 0;
while(start + k - 1 < str.length - 1) {
// k 个一组反转
reverse(str,start,start + k - 1);
start += k;
}
// 最后一个字符是 #,所以要小于 str.length - 2
for(int i = 0; i < str.length - 2; i++) {
System.out.print(str[i] + "->");
}
System.out.print(str[str.length - 2]);
}
}
2.一年中的第几天
题目描述:
输入一个"YYYY-MM-dd"格式的日期字符串,输出该天是当年的第几天(1 月 1 日是每年的第 1 天)
输入描述
:
一个"YYYY-MM-dd"格式的表示日期的字符串
输出描述:
该天是当年的第几天
输入例子1:
2019-01-09
输出例子1:
9
输入例子2:
2004-03-01
输出例子2:
61
解题思路
🍃1.我们首先需要将一年12个月,每月有多少天存放在一个数组中。
🍃2.然后我们要分别用变量保存字符串中包含年月日的部分,并将其转换为整型。
🍃3.判断拿到的年是否为闰年,是闰年,数组 1 下标元素 (2月份) 就加一。
🍃4.最后再通过循环将当前拿到的月份的前面所有月份的天数全部加起来,再加上当前月份的天数并返回。
代码示例
public class Demo1 {
public static int stringToInt(String s) {
int[] d = {31,28,31,30,31,30,31,31,30,31,30,31};
// 拿到字符串中的年月日,并转整形
int year = Integer.parseInt(s.substring(0,4));
int month = Integer.parseInt(s.substring(5,7));
int day = Integer.parseInt(s.substring(8));
// 判断是否为闰年
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
d[1] += 1;
}
for(int i = 0; i < month - 1; i++) {
day += d[i];
}
return day;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int day = stringToInt(s);
System.out.println(day);
}
}