刷力扣的第一天脑子要长出来的感觉(为什么大四才开始啊啊啊啊啊啊啊啊啊啊啊啊)
emmm,自己还是想不太出来(只是一点想法),可能还是会参考评论区,求各位轻喷
- 分析:带符号一定不是回文,要像个好办法将121,第n-1位和第2位联系起来
- 取余得出后一位。
- %去第n位
- if(n/10==n%10){ true}
- 外面再嵌套一层do while
public boolean isPalindrome(int x) {if(x<0){return false;}int cur = 0;int num = x;while(num != 0) {/*例如:121 第一次 cur=1 num=12121 第二次 cur=1*10+12%10=12num=1第三次 cur=12*10+1num=0退出循环*/cur = cur * 10 + num % 10;//将原来的数倒置,num /= 10;}return true;//我的想法,不能通过全部案例,可以改成/* return cur==x; //倒置结果相等位true,*/}
判断到一半就退出
-
罗马数字转整数
- 分析题目,找规律
- 小值在大值左边,减小值
- 小值在大值右边,加小值
/*没想到用switch case来转换字符与数值的关系*/ class Solution {private int getValue(char ch) {//从字符转化成数字switch(ch) {case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}}public int romanToInt(String s) {int sum = 0;int preNum = getValue(s.charAt(0));//获取第一个字符,更具数值的大小判断用-/+法for(int i = 1;i < s.length(); i ++) {int num = getValue(s.charAt(i));if(preNum < num) {sum -= preNum;} else {sum += preNum;}preNum = num;}sum += preNum;return sum;} }
- 提交的版本
class Solution {public int romanToInt(String s) {int sum=0;//用于记录得出的值int first=getValue(s.charAt(0));//s.char()获取字符,调用方法或得数值 /*for来读取有几个数值,并比较左值和右值的大小来判断用-/+ */for(int i = 1;i < s.length(); i ++) {int num = getValue(s.charAt(i));//获取后面的数值if(first < num) {//first不一定就是第一个值啦sum -= first;} else {sum += first;}first = num;}sum += first;return sum;}private int getValue(char ch) {switch(ch) {case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}} }
-
最长前缀(王道数据结构中有类似题目)
- c++将字符串分解成一个一个字符,使用两个指针,同时从第一个空间开始便利,对比两个空间里的字符是不是一样的。
- java:找个最短的字符,读取长度,在长度内和另一个字符一一比较,不同就跳出,并记录个数,好输出
/*我的,不能通过所以的案例*/
class Solution {public String longestCommonPrefix(String[] strs) {/*如果有空字符,就没有共同前缀 */if(strs.length == 0) return " ";/*用一个字符串来比较 */String a = strs[0];/**for循环来一次比较,并在跳出前记录以及比较过的字符串 */for(int i =1;i<strs.length;i++) {int j=0;for(;j<a.length() && j < strs[i].length();j++) {if(a.charAt(j) != strs[i].charAt(j)){break;}}a = a.substring(0, j);//j用来记录相同的字符个数,if(a.equals("")){return " ";//删除空格就可以通过所有的了}}return a;//输出字符}}
-
有效括号(王道)
/*switch case case里面用ifelse,但是代码量比较大,要长脑子 了么*/ class Solution {public boolean isValid(String s) {int n=s.length();if(n%2!=0) return false;//入一半的栈int[] stack;stack=new int[n];int top=-1;for(int i=0;i<n;i++){int c = s.charAt(i);if(c=='('||c=='{'||c=='['){stack[++top]=c;}//只有左边可以入栈else{if(top!=-1){switch(c){case ')':if (stack[top]!='(') return false;break;case '}':if (stack[top]!='{') return false;break;case ']':if (stack[top]!='[') return false;break;}top--;}else return false;//右半边不能入栈}} if(top!=-1) return false;return true;} } /*用栈,进出栈来比较左右括号*/
-
合并链表(王道)
/*链表的比较,以及语法还是要再加强一下,好不容易会一个,因为链表.的使用方法纠结好久,给了结构体,所以用.val和.next来移动指针和取值
public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1 == null) {return list2;}if(list2 == null) {return list1;}if(list1.val < list2.val) {list1.next = mergeTwoLists(list1.next, list2);return list1;} else {list2.next = mergeTwoLists(list1, list2.next);return list2;}}
}
- 删除重复项(王道有)我是菜菜,没做出来
int length = nums.length;if (length <= 1) {return length;}int j = 0;
/*j作为一个哨兵,用于记录删除后后续应填入数的位置*/for (int i = 0; i < length; i++) {if (nums[i] != nums[j]) {nums[++j] = nums[i];//重点,相等时j不变,不移动,等不等时,移动指针,放入nums[i]的值}}return j+1;
/*在26的基础上改编*/
class Solution {public int removeElement(int[] nums, int val) {
int length = nums.length;if (length < 1) {return length;}/*不加的话,会有一个例子不过*/if(length==1){if(nums[0]==val){return 0;}}int j = 0;
/*j作为一个哨兵,用于记录删除后后续应填入数的位置*/for (int i = 0; i < length; i++) {if (nums[i]!=val) {nums[j++] = nums[i];//重点,相等时j不变,不移动,等不等时,移动指针,放入nums[i]的值}}return j;}
}
-
/*呦吼,完全自己写的没有参考哦,脑子开始长了*/ class Solution {public int searchInsert(int[] nums, int target) {int j=0;for(int i=0;i<nums.length;i++){if(nums[i]<=target){if(nums[i]<target){j++;}else{break;}}else{break;}}return j;} }