My_leetcode
截断句子
句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
例如,”Hello World”、”HELLO” 和 “hello world hello world” 都是句子。
给你一个句子 s 和一个整数 k ,请你将 s 截断 ,使截断后的句子仅含 前 k 个单词。返回 截断 s 后得到的句子。
- C++
lass Solution { public: string truncateSentence(string s, int k) { string s1; int i,flag=0; for(i=0;i<s.length();i++){ if(s[i]==' '){ flag++; } if(flag==k){ break; } s1+=s[i]; } return s1; } };
- java
class Solution { public String truncateSentence(String s, int k) { String[] s1=s.split(" ");; String s2=""; int i; for(i=0;i<k;i++){ s2=s2.concat(s1[i]); if(i<k-1){ s2=s2.concat(" "); }} return s2; } }
链表
链表问题,
求和
2 3 4
3 4 5
输出
x x x
/**
java
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre=new ListNode(0);
ListNode cru=pre;
int carry=0;
while(l1!=null||l2!=null){
int x= l1==null? 0 : l1.val;
int y= l2==null? 0 : l2.val;
int sum=0;
sum=x+y+carry;
carry=sum/10;
cru.next=new ListNode(sum%10);
cru=cru.next;
if(l1!=null){
l1=l1.next;
}
if(l2!=null){
l2=l2.next;
}
}
if (carry!= 0){
cru.next=new ListNode(carry);
}
return pre.next;
}
}
C++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
#define null ((void *)0)
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* pre = new ListNode(0);
ListNode* cur = pre;
int carry=0;
while( l1 != null || l2 != null) {
int x=l1==null ? 0:l1->val;
int y=l2==null ? 0:l2->val;
int sum=x+y+carry;
carry=sum/10;
sum=sum%10;
cur->next = new ListNode(sum);
cur = cur->next;
if(l1 != null)
l1 = l1->next;
if(l2 != null)
l2 = l2->next;
}
if(carry == 1) {
cur->next = new ListNode(carry);
}
return pre->next;
}
};
主要这道题可以理解链表,自己写几遍可以加深一下印象。
pre记录最前面的地址,最后pre.next,即可获得第二个地址,就很巧妙。