第一天题目:
0314.反转字符串
标签:双指针
难度:简单
题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
来源:力扣(LeetCode)
解题思路:
使用双指针,一个指向左端,一个指向右端,交换后,相向移动两个指针,完成遍历。
代码实现:
class Solution { public void reverseString(char[] s) { int left = 0; int right = s.length-1; while(left<right){ char temp = s[left]; s[left] = s[right]; s[right] = temp; left++; right--; } } }
第二天题目:
0367.有效的完全平方数
标签:遍历
难度:简单
题目描述:
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
进阶:不要 使用任何内置的库函数,如 sqrt 。
来源:力扣(LeetCode)
解题思路:
思路:1 = 1*1 = 1
4 = 2*2 = 1+3
9 = 3*3 = 1+3+5
16 = 4*4 = 1+3+5+7
以此类推,所以一个for循环num依次减去1、3、5、7.....,最后结果为正好等于0,代表num是完全平方数,否则,不是完全平方数。代码实现:
class Solution { public boolean isPerfectSquare(int num) { //奇数的和最后等于num,则是完全平方数 for(int i=1;num>0;i+=2){ num-=i; } return num==0; } }
第三天题目:
面试题16.07.最大数值
标签:三目运算符
难度:简单
题目描述:
编写一个方法,找出两个数字
a
和b
中最大的那一个。不得使用if-else或其他比较运算符。解题思路:
解题思路:定义一个整型变量max保存a和b中较大的值,使用三目运算符判断a是否大于b,如果是,则将a赋值给max,若不是,则max=b。
代码实现:
class Solution { public int maximum(int a, int b) { int max=0; max=(a>b)?a:b; return max; } }
第四天题目:
0066.加一
标签:加一
难度:简单
题目描述:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
来源:力扣(LeetCode)
解题思路:重要是看数组数是9的情况,比如99,999之类,这样的话+1会进一,数组长度也会增加,变成100,1000;
设置循环从后往前看,判断当前数组的数字是9的情况。如果不是9,直接加1并且返回数组;如果是9的话让当前位直接变成0,接着循环判断9的情况。
如果是类似于{‘9’,‘9’,‘9’}这种情况,我们还要建立一个新数组,新数组的长度要比输入的数组长度大一位,且第一位是1,后面都是0代码实现:
第五天题目:
0013.罗马数字转整数
标签:switch语法
难度:简单
题目描述:
来源:力扣
解题思路:
先用switch语句找到对应的字母,对应的整数存在nums数组中,如果小数字在大数字在就想减,最后将数组里的所有整数想加即可。
代码实现:
![]()
第六天题目:
0441.排列硬币
标签:
难度:简单
题目描述:
解题思路:
易知硬币排列的整数满足(a1 = 1, d = 1)的等差数列。
所以该等差数列的前n项和的公式为:Sn = n * a1 + n(n - 1) / 2
将Sn带入n的整数部分便是解。
推导过程如下:
故使用(int) (Math.sqrt((long) 8 * n + 1)- 1) / 2 返回n的整数部分即可
代码实现: