1295.统计位数为偶数的数字
我的题解:
class Solution {
public int findNumbers(int[] nums) {
Arrays.sort(nums);
int size=0;
int power=1;
for (int i = 0; i < nums.length; i++) {
double pow = Math.pow(10, power);
nums[i]= (int) (nums[i]/pow);
while(nums[i]!=0){
nums[i]=nums[i]/10;
power++;
}
if(power%2==0) size++;
}
return size;
}
}
官方题解:(真是无所不用其极)
class Solution {
public int findNumbers(int[] nums) {
int ans = 0;
for (int num : nums) {
if (String.valueOf(num).length() % 2 == 0) {
ans++;
}
}
return ans;
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/find-numbers-with-even-number-of-digits/solutions/101807/tong-ji-wei-shu-wei-ou-shu-de-shu-zi-by-leetcode-s/
来源:力扣(LeetCode)
155.最小栈
这里是看@宝石发布的题解写的,这个方法很好理解。
public class MinStack {
Node head;
public MinStack() {
}
public void push(int x) {
if(head==null) head=new Node(x,x,null);
else head=new Node(x,Math.min(head.min,x),head);
}
public void pop() {
head=head.next;
}
public int top() {
return head.num;
}
public int getMin() {
return head.min;
}
}
class Node{
int num;
int min;
Node next;
public Node(int num,int min,Node next){
this.num=num;
this.min=min;
this.next=next;
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/
394.字符串解码
把所有字符都存入一个栈中遇到’]‘就进行出栈一直到遇到’[‘,之后再把’['前面的数字进行出栈,在调用StringToChars这个方法,返回值在入栈,这样就可以完美解决嵌套的问题。
class Solution {
public String decodeString(String s) {
//让s变成数组方便运算
char[] charArray = s.toCharArray();
Stack<Character> stack=new Stack<>();
StringBuilder stringBuilder=new StringBuilder();
for (char c : charArray) {
if(c==']'){
//找出[]里的字母
StringBuilder letters = new StringBuilder();
while(stack.peek()!='['){
letters.append(stack.pop());
}
//删除'['
stack.pop();
//找出数字
StringBuilder number=new StringBuilder();
while(!stack.isEmpty()&&stack.peek()>='0'&&stack.peek()<='9'){
number.append(stack.pop());
}
for (char stringToChar : StringToChars(Integer.parseInt(number.reverse().toString()), letters.reverse().toString())) {
stack.push(stringToChar);
}
continue;
}
stack.push(c);
}
while(!stack.isEmpty()){
stringBuilder.append(stack.pop());
}
return stringBuilder.reverse().toString();
}
public char[] StringToChars(int num,String string){
char[] charArray = string.toCharArray();
char[] returnChars=new char[charArray.length*num];
int j=0;
for (int i = 0; i < num; i++) {
for (char c : charArray) {
returnChars[j]=c;
j++;
}
}
return returnChars;
}
}
234.回文链表
/**
* Definition for singly-linked list.
* 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 boolean isPalindrome(ListNode head) {
ListNode reverseHead=null;
ListNode headNode = head;
while(headNode!=null){
reverseHead=new ListNode(headNode.val,reverseHead);
headNode=headNode.next;
}
while(head!=null&&reverseHead!=null){
if(head.val!=reverseHead.val) return false;
head=head.next;
reverseHead=reverseHead.next;
}
return true;
}
}